我有一个函数myFunc
可以通过两种不同的方式触发:单击div1或div2。
$(this)
。我已经尝试过这段代码,但第二个版本(我传递参数的地方)会自动触发,即使没有点击任何内容。我做错了什么,在这两种情况下我是否需要将this
作为参数传递?
$('#div1').live('click', myFunc);
$('#div2').live('click', myFunc('param1 value', 'param2 value'));
function myFunc(param1, param2){
console.log('inside myFunc');
}
答案 0 :(得分:4)
将第二个live
来电替换为:
$('#div2').live('click', function() {
myFunc.call(this, 'param1 value', 'param2 value');
});
或者在jQuery 1.7+中使用新的on
方法,该方法被提议作为绑定处理程序的新标准:
$(document).on('click', '#div2', function() {
myFunc.call(this, 'param1 value', 'param2 value');
});
答案 1 :(得分:1)
你的第二行是立即执行myFunc
。相反,将其包装在匿名函数中:
$('#div2').live('click', function() {
myFunc.apply(this, ['param1 value', 'param2 value']);
});
答案 2 :(得分:1)
我相信你最好将一个匿名函数作为第二个函数的处理程序传递,并在其中你可以根据需要调用“myFunc”。
示例:
$('#div1').live('click', myFunc);
$('#div2').live('click', function() {
myFunc.call(this, 'param1 value', 'param2 value');
});
答案 3 :(得分:1)
jQuery提供了一种在事件发生时传递data
的简单方法。
这应该是标准方式,
$(document).ready(function() {
$("body").on("click","#div1", {param1: "param1",param2: "param2"},myFunc);
$("body").on("click","#div2",myFunc);
function myFunc(event){
console.log(this.id);
if(this.id == 'div1'){
console.log(event.data.param1);
console.log(event.data.param2);
}
}
});
修改强>
我不知道你的背景或要求是什么,但我会像这样编码,
$("body").on("click","#div1,#div2",function(){
if(this.id == 'div1'){
// the code for div1, use your params here.
}
else{
// the code for div2
}
});
答案 4 :(得分:0)
你不能这样做。 您必须定义内联函数,并从中调用myFunc。
$('#div1').live('click', myFunc);
$('#div2').live('click', function(){ return myFunc('param1 value', 'param2 value'); } );