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

passing arguments from one function to another in javascript

本文关键字:函数 一个 另一个 javascript 参数      更新时间:2023-09-26

我有日期值

  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:缺少)
源代码:date_click(2012年8月31日星期五00:00:00 GMT+0100(IST))

我知道这是个小错误,但我想不出办法。任何帮助都会很棒。

谢谢

编写时:

'...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,所以当您可以使用正确的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元素的干净方法。

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

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

请按照@Alnitak的说法,这是一种干净的做事方式。

使用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);
});

这样你就不必打乱对字符串的各种级别的解释,这种方式要简单得多。