我可以独立创建和禁用多个onclick事件吗?

时间:2015-04-15 18:40:02

标签: javascript jquery

我希望将第二个函数绑定和取消绑定到事件,而不会影响第一个函数。例如:

我有一个具有标准onclick事件的按钮:

<input type="button" onclick="myFunction();" id="my_button" value="Click Me" />

我想将第二个函数绑定到它,以便在单击按钮时触发这两个函数:

$('#my_button').on('click',myOtherFunction());

我希望第二个功能仅在第一次单击时触发,因此我想在myOtherFunction()中包含一行来删除第二个绑定:

$('#my_button').off('click');

但是我不想关闭原始操作 - myFunction() - 然后再次绑定它,因为它似乎会使代码变得更加混乱,如果我想要有错误的风险在将来更改默认按钮单击。

在不影响第一个函数的情况下,是否有一种干净的方法可以绑定和解除第二个函数的绑定?

3 个答案:

答案 0 :(得分:2)

您是否尝试过使用.one jQuery功能?它将作为.on工作,但在执行函数后取消注册侦听器。

$('#my_button').one('click',myOtherFunction);

无论如何,我建议绑定JS代码中的第一个函数而不是HTML(如果可以的话)。

$('#my_button')
  .on('click',myFunction)
  .one('click',myOtherFunction);

答案 1 :(得分:1)

你提出的方式不是一个很好的方法。

将两个函数绑定到.on()回调,但使用数据确保它只运行一次。

分别给定函数one()all()

$('#my_button').on('click', function () {
    if (!$(this).data('one-ran')) {
        $(this).data('one-ran', 1);
        one();
    }
    all();
});

http://jsfiddle.net/soxtmoo1/1/

答案 2 :(得分:0)

我认为解决此问题的方法是实例化点击计数器:

var click = 0
$('#my_button).on('click', function(){
  if (click >= 1){
    // execute code for second function
  }
  // execute first function
  click++

})

我的JS有点生疏,但有些效果