Jquery删除并添加单击事件

时间:2011-02-02 22:32:34

标签: javascript jquery

是否可以删除而不是将click事件添加到特定元素?即

我有一个 $("#elem").click(function{//some behaviour}); $(".elem").click(function{//some behaviour});(有多个元素),而我的另一个函数getJson正在执行我想删除点击来自#elem的事件,并从getJson函数再次添加它,但是一直保留mouseenter和mouseleave事件?

或者也许创建叠加以防止在模态窗口中点击?这是更好的主意吗?

编辑

我已经看到了一些非常好的答案,但有一个细节我没有故意省略。有多个元素,我调用className上的click函数而不是我在原始问题中所说的

4 个答案:

答案 0 :(得分:6)

而不是使用unbind(),这意味着您以后必须重新绑定相同的事件处理程序,您可以使用jQuery的data()工具来处理ajaxStartajaxStop个事件在所有AJAX请求期间让您的元素忽略click个事件:

$(".elem").click(function() {
    if (!$(this).data("ajaxRequestPending")) {
        // some behaviour
    }
}).ajaxStart(function() {
    $(this).data("ajaxRequestPending", true);
}).ajaxStop(function() {
    $(this).removeData("ajaxRequestPending");
});

编辑:此答案也是 id-to-class-proof (请参阅提问者的编辑),因为与选择器匹配的所有内容都将以正确的方式处理AJAX事件。这是jQuery的主要卖点,它表明了。

答案 1 :(得分:2)

您正在寻找.unbind()。传递它'click',它将破坏点击事件。

我会把它放在你的getJSON之前,并在你的ajax调用的成功处理程序中重新绑定click事件。

答案 2 :(得分:0)

你必须做一些额外的脚本。没有回调。请看一下这里:jQuery - How can I temporarily disable the onclick event listener after the event has been fired?

答案 3 :(得分:0)

您可以检查另一个变量的状态,看看是否应该执行操作,而不是取消绑定/绑定click事件。

var MyObject = {
  requestActive = false;
};

function MyJsonFunction() {
  // when requesting
  MyObject.requestActive = true;
  //...
  // when request over
  MyObject.requestActive = false;

}

$("#elem").click(function{
  if (MyObject.requestActive == true) {
    //do something
  }
});