用javascript将参数从一个函数传递到另一个函数
passing arguments from one function to another in 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:缺少)
源代码: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);
});
这样你就不必打乱对字符串的各种级别的解释,这种方式要简单得多。
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 我可以在json对象中添加一个函数吗
- Javascript使函数一个接一个地执行
- 是JavaScript中的函数一个对象
- 两个几乎相等的jQuery函数;一个适用于IE,一个不适用于IE
- 两个Javascript函数一个window.onload=Custom.init;和一个window.onload=f
- 使javascript加载函数一个接一个地执行
- 如何通过两个嵌套的匿名函数(一个带有超时的事件处理程序)传递变量
- 为什么我不能让两个jQuery函数一个在另一个里面呢?
- 给函数一个变量名,而不是它的值
- 如何使用嵌入函数(一个滚动页由Pete - peachananr)
- 是否有可能给JavaScript函数一个类型/类?
- 确保两个函数一个接一个地执行,其中第一个函数内部有一个异步调用
- 两个不同的ajax函数一个接一个调用返回相同的值
- jQuery第一次更改函数一个工作
- 给这个函数一个id
- 如何给回调函数一个值一个变量在特定时刻
- 使用回调使两个函数一个接一个地运行
- 两个函数(一个用php)是否可以用“;onclick”;
- 两个几乎相同的函数.一个函数用Queue进行排队.Jquery效果在queued函数上不起作用.为什么