在javascript中将参数从一个函数传递到另一个函数

时间:2012-08-27 10:59:37

标签: javascript

我有日期值

  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));

我知道它的小错误,但我无法想办法。任何帮助都会很棒。

谢谢

3 个答案:

答案 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);

});

这样你就不必乱用各种级别的字符串解释,这种方式更简单。