0

我有 2 个具有唯一 id 的按钮,即带有 click 事件的 previousButton 和 nextButton。我想根据特定条件启用或禁用每个按钮的点击事件。

例如

var a=2;
var b=4
if (a!=2)
{  
   $('#previousButton').unbind('click');
}
else{
  $('#previousButton').bind('click');
}

if (b!=4)
{  
   $('#nextButton').unbind('click');
}
else{
  $('#nextButton').bind('click');
}

然后我有下面的代码:

 $('#nextButton').click (function(){    //do some logic when next
button is clicked. });

$('#previousButton').click (function(){    //do some logic when
previous button is clicked });

问题:

  1. 取消绑定按钮可以完美运行,但是绑定按钮一旦取消绑定就根本不起作用。

  2. 我尝试使用,但每次满足此条件时都会调用单击事件。但我只想启用点击按钮并等待触发点击事件。

$('#nextButton').bind('click',someHanlder);

请问有什么办法可以实现吗?

更新

请注意,我不想在使用 bind 时调用任何函数。我只想绑定并准备好触发点击事件。否则,它调用该函数。这就是我所追求的:

  1. 解绑。
  2. 单击按钮时,什么都不会发生。
  3. 绑定(不希望点击事件在这里触发
  4. 单击按钮时,应触发 Click 事件。

更新 请参阅下面的 JSFiddler 示例,其中立即调用绑定处理程序:http: //jsfiddle.net/myagdi/MCAKL/

4

2 回答 2

1

当您从元素取消绑定事件时,它会删除处理程序...现在如果您尝试再次绑定它,您需要再次传递相同的处理程序..

如你所说"but this invokes the click event everytime this condition is met. But I just want to enable the click button and wait for click event to be triggred."

我没有看到这种情况发生..

我做了一个小提琴,我首先绑定然后解除绑定然后再次绑定..它表现得非常好...... Jsfiddle

If you don't specify any option in unbind call it removes all event handlers attached with the element, you can specify event type(In your case click) to unbind only that..You can even specify handlers to remove that way remaining handlers won't be detached..

编辑:

根据您的问题 Jsfiddle,您正在做的错误是将括号应用于处理程序......您不应该在处理程序中给出括号,$('#a').bind("click", handler());而是写$('#a').bind("click", handler);现在检查新 Jsfiddle

于 2012-06-17T08:48:33.643 回答
0

更好的方法是在事件处理程序本身内部进行这些检查。

$('#nextButton').click(function() {
    if(a == 2) {
        alert('Next button is clicked');
    }
});

$('#previousButton').click(function() {
    if(b == 4) {
        alert('Previous button is clicked');
    }
});

最终你仍然在用 JavaScript 编程,所以要使用这种语言!

于 2012-06-17T08:54:40.163 回答