0

我有日期值

  for(i=0;i<data['before'].length;i++) {
        var day = data['before'][i];               
        var dte = new Date(day);

我正在尝试将日期显示为从 java 脚本动态显示为 div 中的链接。单击链接时,我将 dte 作为对象传递给date_click函数。

$('#before_dates').append('<tr><td><a onclick="date_click('+dte+');" href="javascript:void(0)">'+dte.toDateString()+'</a></td></tr>');

在点击链接时

function date_click(date){
    alert("Hi..."+dte);
}

我收到以下错误:

错误:SyntaxError: missing ) after argument list
Source Code: date_click(Fri Aug 31 2012 00:00:00 GMT+0100 (IST));

我知道它的小错误,但我想不出办法做到这一点。任何帮助都会很棒。

谢谢你

4

3 回答 3

1

当你写:

'...date_click('+dte+')';

你实际得到的是:

'...date_click(' + dte.toString() + ')';

IE:

date_click(Fri Aug 31 2012 00:00:00 GMT+0100 (IST))

这显然不是有效的 JS,因此报告了错误。

您似乎正在尝试传递实际dte变量,而不是其字符串表示形式。为此,您只需编写date_click(dte)不带任何引号的内容,但这仅适用dte于全局变量(而且这些变量很糟糕!)。

但是,您有 jQuery,所以当您可以使用正确的 DOM3 事件处理程序时,不要使用 DOM0“内联”事件处理程序。它们会导致引用问题(正如您在此处遇到的那样)并且除非指定的函数在“全局”范围内,否则它们也不起作用。

根据更新的问题,使用data()将当前对象绑定到事件处理程序。

function date_click(ev) {
    ev.preventDefault();
    var date = $(this).data('date');
    alert("Hi..." + date);
}

for (i = 0; i < data['before'].length; ++i) {
    var day = data['before'][i];  
    var dte = new Date(day);
    var $a = $('<a>', { text: dte.toDateString() }).data('date', dte);
    var $tr = $('<tr>').appendTo('#before_dates');
    var $td = $('<td>').appendTo($tr).append($a);
}

$('#before_dates').on('click', 'a', date_click);  // use event delegation

请注意,现在这非常冗长,但它是构建所需 DOM 元素的一种简洁方式。

于 2012-08-27T11:04:07.643 回答
1

您缺少引号(因此出现语法错误)

append('<tr><td><a onclick="date_click(\''+dte+'\');" href="javascript:void(0)">' ...)

请遵循@Alnitak 所说的,这是一种干净的做事方式。

于 2012-08-27T11:04:55.990 回答
0

使用 jQuery 动态附加事件:

var row = $('<tr><td><a href="#">' + dte.toDateString() + '</a></td><td>');

$('#before_dates').append( row );

row.find("a").click( function(e) {
    e.preventDefault();
    alert('Hi...' + dte);

});

这样你就不必弄乱你的字符串的不同层次的解释,这种方式要简单得多。

于 2012-08-27T11:04:53.323 回答