0
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

4 回答 4

0

也许您不想使用任何 javascript 库,但我强烈建议您使用 YUI 事件实用程序。Dustin Diaz 有一篇很棒的文章,解释了它将如何为您简化这一过程。

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

于 2010-01-28T21:06:08.737 回答
0

您将函数定义放在字符串文字中。它期待代码,它所拥有的只是文本。

于 2010-01-28T14:03:23.923 回答
0

您应该重写您的 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 处理程序附加到同一单元格,这就足够了。

于 2010-01-28T15:04:16.733 回答
0
    <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 文件上尝试它,并且在那里,是的,使用函数。

于 2010-01-28T15:24:54.997 回答