从2个不同的点击事件触发相同的功能,有和没有参数

时间:2012-05-31 19:50:26

标签: javascript jquery

我有一个函数myFunc可以通过两种不同的方式触发:单击div1或div2。

  • 如果点击来自div2,我想在通话时将一些参数传递给该功能。
  • 此外,在这两种情况下,我都需要对所点击的项目进行引用:$(this)

我已经尝试过这段代码,但第二个版本(我传递参数的地方)会自动触发,即使没有点击任何内容。我做错了什么,在这两种情况下我是否需要将this作为参数传递?

$('#div1').live('click', myFunc);
$('#div2').live('click', myFunc('param1 value', 'param2 value'));

function myFunc(param1, param2){
  console.log('inside myFunc');
}

5 个答案:

答案 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']);
});

您需要使用applycall来保留原始上下文(否则this中的myFunc将是全局窗口对象而不是单击的元素)

答案 2 :(得分:1)

我相信你最好将一个匿名函数作为第二个函数的处理程序传递,并在其中你可以根据需要调用“myFunc”。

示例:

$('#div1').live('click', myFunc);
$('#div2').live('click', function() {
  myFunc.call(this, 'param1 value', 'param2 value');
});

答案 3 :(得分:1)

不要使用live,现在已弃用。请改用on

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'); } );