1

我正在使用 Pretty-checkboxes-plugin 并遇到问题。该插件可以在这里看到http://aaronweyenberg.com/90/pretty-checkboxes-with-jquery

如您所见,这使用两个链接来选择和取消选择。我希望它只使用一个链接,然后更改类以使其在下次单击时以另一种方式工作。

它应该足够简单。我一直试图让它与toggleClass一起工作。

我只是放入了 toggleClass 语句,因此代码如下所示:

$(document).ready(function() {

/* see if anything is previously checked and reflect that in the view*/
$(".checklist input:checked").parent().addClass("selected");

/* handle the user selections */
$(".checklist .checkbox-select").click(
function(event) {
  event.preventDefault();
  $(this).parent().addClass("selected");
  $(this).parent().find(":checkbox").attr("checked","checked");
  $(this).toggleClass("checkbox-select checkbox-deselect");

 }

);

$(".checklist .checkbox-deselect").click(
 function(event) {
  event.preventDefault();
   $(this).parent().removeClass("selected");
   $(this).parent().find(":checkbox").removeAttr("checked");
   $(this).toggleClass("checkbox-select checkbox-deselect");
   }

   );

});

这在某种程度上有效。类切换得很好,但其余代码仅在第一次运行时才有效。所有后续点击只是切换类 og 链接,没有别的。

有谁知道这是为什么?

4

2 回答 2

0

您设置事件处理程序的方式使我认为您正在想象将根据“类”设置动态调用处理程序。您实际上得到的是在调用“就绪”处理程序时根据类设置静态绑定处理程序的东西。 类分配的更改对调用这些处理程序的方式没有任何影响。

除了这种设置,还有几种方法可以走。首先,您可以绑定单个事件处理程序,然后通过简单的“hasClass()”测试检查该处理程序中的当前类。那会很简单。

另一种方法是使用“委托”或“实时”机制,它们确实具有您当前代码似乎希望的动态解释行为。

于 2010-04-22T14:29:49.980 回答
0
$(this).toggleClass("checkbox-select checkbox-deselect");

仅更改元素的类不会更改在其上注册的事件侦听器。您注册了处理程序以在准备就绪时选择匹配的元素,并且该处理程序,而不是取消选择处理程序,在元素从 更改为$(".checklist .checkbox-select")后仍然存在。.checkbox-selectcheckbox-deselect

如果您真的想要事件时间绑定,则需要该live()函数而不是普通click()绑定。但是,我建议您最好使用单个功能:

$('#checktoggler').click(function() {
    // select all, unless all are already selected, in which case select none
    var selected= $('.checklist input:checked').length!==0;
    selected= !selected;

    $(this).parent().toggleClass('selected', selected);
    $(this).parent().find(":checkbox").attr('checked', selected);
    $(this).toggleClass('checkbox-select checkbox-deselect', selected);
});
于 2010-04-22T14:32:28.630 回答