在javascript中将参数从一个函数传递到另一个函数
我有日期价值在javascript中将参数从一个函数传递到另一个函数,javascript,Javascript,我有日期价值 for(i=0;i<data['before'].length;i++) { var day = data['before'][i]; var dte = new Date(day); 单击链接后 function date_click(date){ alert("Hi..."+dte); } 我遇到以下错误: 参数列表后的错误:语法错误:缺失 源代码:点击日期(2012年8月31日星期五00:00
for(i=0;i<data['before'].length;i++) {
var day = data['before'][i];
var dte = new Date(day);
单击链接后
function date_click(date){
alert("Hi..."+dte);
}
我遇到以下错误:
参数列表后的错误:语法错误:缺失源代码:点击日期(2012年8月31日星期五00:00:00 GMT+0100(IST))强> 我知道它有点小错误,但我想不出一个方法来做到这一点。任何帮助都会很好 感谢您写下以下内容:
'...date_click('+dte+')';
你实际得到的是:
'...date_click(' + dte.toString() + ')';
i、 e:
这显然是无效的JS,因此报告了错误
您似乎试图传递的是实际的dte
变量,而不是它的字符串表示形式。为此,您只需编写date\u单击(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
功能日期\点击(ev){
ev.preventDefault();
变量日期=$(this).data('date');
警报(“嗨…”+日期);
}
对于(i=0;i
请注意,现在这相当详细,但这是一种构建所需DOM元素的干净方法。使用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);
});
var行=$('');
$(“#在#日期之前”)。追加(行);
行。查找(“a”)。单击(函数(e){
e、 预防默认值();
警报(“高…”+dte);
});
这样,您就不必处理字符串的各种级别的解释,这样更简单。您缺少引号(因此出现语法错误)
append(“”…)
请按照@Alnitak所说的去做,这是一种干净的做事方式。我想你必须用双引号将你的日期括起来:
date\u点击(“+dte+”)
+1@KristerAndersson它看起来应该像警报(“嗨…”+dte+”)
和date\u click(“+dte+”)
从单击的元素读取日期字符串是否比从捕获的变量读取日期字符串更好?如果通过某种DOM操作,存储为
标记文本的日期被修改,则单击处理程序仍将输出旧日期。@AmithGeorge看起来OP实际上是在传递实际的日期对象,而不是它的字符串表示形式。实际上,我认为这不是他想要的。我想他想把dte
作为一个参数传递,而不是dte
的值。嗨,我试了你的答案,但它给了我一个特定的日期,尽管我点击了不同的日期。好的,但你的问题没有显示多个日期。请更新它以显示不同的日期对象应该如何导致不同的函数调用。嗨,Alnitak,我已经更新了它。。。我正在使用一个循环来实现这一点
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
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);
});
append('<tr><td><a onclick="date_click(\''+dte+'\');" href="javascript:void(0)">' ...)