我有以下不起作用的脚本
<script type="text/javascript" >
function ADS(e){ alert(e); }
$(document).ready(function(){
$(document).on("dblclick","#an_tnam tr", ADS('hello'));
$(document).on("dblclick","#kv_tnam tr", ADS('world'));
// ....
});
</script>
如何将参数传递给事件处理函数ADS?
答案 0 :(得分:101)
您可以将额外数据传递给事件处理函数,并可以使用处理程序中的event.data
进行访问。
$(document).on('dblclick', '#an_tnam tr', { extra : 'random string' }, function(event)
{
var data = event.data;
// Prints 'random string' to the console
console.log(data.extra);
}
使用.trigger()
方法从外部来源触发事件时,您还可以向您喜欢的任何事件发送额外数据
$('#an_tnam tr').trigger('click', [{ extra : 'random string' }]);
将数据传递给触发器方法的不同之处在于,它希望处理程序获取传入的数组长度的额外参数。上面的内容将期望处理程序有一个额外的参数来包含传入的对象。 / p>
$('#an_tnam tr').on('click', function(event, obj)
{
// Prints 'random string' to the console
console.log(obj.extra);
}
答案 1 :(得分:48)
.on()
函数需要传递函数引用;你正在做的是调用函数并传递其返回值。如果您需要传递参数,则需要将该调用包装在匿名函数中。
$(document).on('dblclick', '#an_tnam tr', function(event) {
ADS('hello');
});
jQuery总是将其规范化的事件对象作为要执行的函数的第一个参数传递。
答案 2 :(得分:5)
正如Anthony Grist指出的那样,.on()
方法期待该部分的函数引用;你正在评估一个什么都不返回的函数(null
)。
然而,JavaScript的一个有趣特性是一切都是对象,包括函数。通过少量修改,您可以更改ADS()
以返回匿名函数对象:
function ADS(e){
return function(){ alert(e); };
}
答案 3 :(得分:5)
实际上,有一个非常简洁的方法来实现这一点,没有额外的混乱和没有匿名函数,使用JS bind():
$(document).on('dblclick', ADS.bind(null, 'hello'));
第一个参数是您希望“ this ”具有内部回调函数的值。
Mozilla开发者网络中的MOre信息:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind
答案 4 :(得分:3)
function ADS(e){ alert(e); }
$(document).ready(function(){
$(document).on("dblclick","#an_tnam tr", function (e) { ADS('hello') });
});
会做到这一点。
答案 5 :(得分:3)
function ADS(e) {
return function() {
alert(e);
};
}
就像你正在做的那样
$(document).on("dblclick","#an_tnam tr", ADS('hello'));
,它是返回的函数,被指定为事件处理程序(并且在分配处理程序时传递字符串参数,而不是在调用它时)。