0

我正在尝试创建一个在 Ajax POST 成功后禁用投票按钮的功能。投票按钮在 POST 完成之前一直处于启用状态,然后使用“禁用”样式进行修复并且不可点击。我正在尝试使用 jQuery .not() 禁用从单击的按钮启动该功能(使用“禁用”类),但我运气不佳。这是我的功能的一个小提琴,所以你可以看到我的问题,我不确定我错过了什么,但我希望有人能帮我找到我的错误,这让我很沮丧:)

jQuery代码:

$("a.votebutton").not(".disabled").each(function(index) {
  var el = $(this);
  $(this).click(function() {
      el.addClass("active disabled").unbind("click");
      el.siblings().addClass("disabled");
  });
});

​</p>

4

1 回答 1

4

问题是您的代码:

$("a.votebutton").not(".disabled")

选择在该代码行运行时未禁用的所有链接,然后循环分配单击处理程序。这些点击处理程序仍然绑定到这些链接,即使它们后来碰巧被赋予“禁用”类 - 所以当您将“禁用”类添加到被点击元素的兄弟姐妹时,这些兄弟姐妹仍然有一个工作点击处理程序。如果您从应该修复它的兄弟姐妹中取消单击:

// change
el.siblings().addClass("disabled");
// to be
el.siblings().addClass("disabled").unbind("click");

请注意,您不需要.each()

$("a.votebutton").not(".disabled").click(function() {
      $(this).addClass("active disabled").unbind("click")
             .siblings().addClass("disabled").unbind("click");
});

另一种方法是使用委托事件处理:

$("div.panel").on("click", "a.votebutton:not(.disabled)", function() {
   $(this).addClass("active disabled")
          .siblings().addClass("disabled");
});

这样,只有当它们冒泡到包含的 div(“div.panel”)时才会处理点击,此时只有当事件的源元素与作为.on().

更新演示:http: //jsfiddle.net/RSezp/2/

于 2012-05-23T01:05:51.043 回答