Ошибка синтаксиса JavaScript - PullRequest
0 голосов
/ 28 января 2010
var dayNumberCell = doc.createElement('td');
  dayNumberCell.className = 'days_link';
      dayNumberCell.setAttribute('onclick', function(scope) {
                                            var bindScope = function()    {
                                                scope.changeDate(this, this.id);
                                                scope.returnDate(scope.month, scope.year);
                                            };
                                            return bindScope;
                              }(this));

Приведенный выше код генерирует прослушиватель событий tds onclick. и сгенерированный код выглядит как

    <td class="days_link" onclick="function () {
    scope.changeDate(this, this.id);
    scope.returnDate(scope.month, scope.year);
}">15</td>

При нажатии на TD я получаю сообщение об ошибке синтаксиса. Как мне написать свою функцию, чтобы указанный код выполнялся, а также не имел синтаксической ошибки.

Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 29 января 2010

Возможно, вы бы предпочли не использовать никакие библиотеки javascript, но я настоятельно рекомендую использовать для этого утилиту YUI Event. У Дастина Диаса есть отличная статья, которая объясняет, как это упростит это для вас.

http://www.dustindiaz.com/yahoo-event-utility/

0 голосов
/ 28 января 2010

Вы должны переписать ваш обработчик onclick следующим образом:

dayNumberCell.onclick = function(e) {
   var target = e.target || e.srcElement;
   target.changeDate(target, target.id);
   target.returnDate(target.month, target.year);

   return false;
};

Я не понимаю, почему вы пытаетесь установить встроенный обработчик кликов из внешнего файла js. Вы сделали правильный шаг, чтобы удалить встроенные обработчики кликов из вашего HTML, но когда вы устанавливаете обработчик кликов из внешнего скрипта, вам не следует устанавливать атрибут onclick.

В дополнение к тому, как я выделил, вы можете использовать обработчики событий w3c и microsoft, чтобы вы могли прикрепить несколько событий onclick к одному и тому же элементу. Однако это более сложный подход, поскольку разные браузеры обрабатывают его по-разному. Этого будет достаточно, если вы не планируете подключать другие обработчики onclick к той же ячейке.

0 голосов
/ 28 января 2010
    <td class="days_link" onclick="function () {
    scope.changeDate(this, this.id);
    scope.returnDate(scope.month, scope.year);}">15</td>

Вы пробовали вне функции?

    <td class="days_link" onclick="scope.changeDate(this, this.id);scope.returnDate(scope.month, scope.year);">15</td>

если это не сработает, попробуйте его в своем файле javascript, и там, да, с функцией.

0 голосов
/ 28 января 2010

Вы помещаете определение вашей функции в строковый литерал. Он ожидает код, и все, что у него есть, это текст.

...