我有日期值
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) 源代码:date_click(2012年8月31日星期五00:00:00 GMT + 0100(IST));
我知道它的小错误,但我无法想办法。任何帮助都会很棒。
谢谢
答案 0 :(得分:1)
当你写:
'...date_click('+dte+')';
你真正得到的是:
'...date_click(' + dte.toString() + ')';
即:
date_click(Fri Aug 31 2012 00:00:00 GMT+0100 (IST))
显然无效的JS,因此报告错误。
您似乎试图传递实际的dte
变量,而不是其字符串表示形式。为了实现这一点,你只需要编写date_click(dte)
而没有任何引号,但这只有在dte
是一个全局变量时才会起作用(那些是坏的!)。
但是你有jQuery,所以不要使用DOM0&#34; inline&#34;当你可以使用正确的DOM3时,事件处理程序。它们引起引用问题(就像你在这里一样)并且除非指定的函数在&#34; global&#34;范围。
根据更新的问题,使用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元素的一种简洁方法。
答案 1 :(得分:1)
您缺少引号(因此语法错误)
append('<tr><td><a onclick="date_click(\''+dte+'\');" href="javascript:void(0)">' ...)
请遵循@Alnitak所说的,这是一种干净的做事方式。
答案 2 :(得分: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);
});
这样你就不必乱用各种级别的字符串解释,这种方式更简单。