与li的jquery复选框

hol*_*den 3 javascript checkbox jquery list jquery-selectors

我有一系列的复选框,一切正常,除了他们的默认行为已被无意改变,所以我不能再检查它们是奇怪的,因为我使用这个jquery的原因是当他们检查时突出他们周围的李第一名.

有任何想法吗?

//Tag cloud
$(".tag-cloud li").toggle(
  function () {
    //$(this).filter(":checkbox").attr('checked', 'true');
    $(this).addClass("selected");
    return;
    //return $(this).filter(":checkbox").attr("checked", true);
  },
  function () {
    //$(this).filter(":checkbox").attr('checked', 'false');
    $(this).removeClass("selected");
    return;
    //$("#sortable").submit();
  }
);
Run Code Online (Sandbox Code Playgroud)

Nic*_*ver 8

您可以整体简化它,并希望通过使用简单的.click()事件处理程序消除奇怪的行为,如下所示:

$(".tag-cloud li").click(function() {
 var cb = $(this).find(":checkbox")[0];
 $(this).toggleClass("selected", cb.checked);
});
Run Code Online (Sandbox Code Playgroud)

无论最初处于何种状态,这都有利于工作.toggle(),预先检查的盒子将关闭.

如果你想让它<li>自己可以点击,我们需要确保在单击实际的复选框本身时(如果它已暴露)不会进入循环或反转切换,如下所示:

$(".tag-cloud li").click(function(e) {
 var cb = $(this).find(":checkbox")[0];
 //if the click wasn't from the checkbox already, toggle it
 if(e.target != cb) cb.checked = !cb.checked;
 $(this).toggleClass("selected", cb.checked);
});
Run Code Online (Sandbox Code Playgroud)

  • @nick,在你的第一个代码片段中你需要`[0]`来表示`cb`赋值. (2认同)