添加和删​​除 li 元素时的 jQuery 冲突(?)

标签 jquery

我有一个这样的表结构:

<table>
  <tr>
    <td>
      <ul>
        <li class="check"></li>
      </ul>
    </td>
    <td>
      <ul>
        <li class="check"></li>
        <li class="check"></li>
      </ul>
    </td>
  </tr>
</table>

我的目标是,在表格单元格内单击时,另一个 li 元素将添加到每个单元格内的单个 ul 中。单击 li 元素时,单元格 ul 中的最后一个 li 将被删除。

这是我尝试过的 jq:

$(document).on("click", "table tr td", function() {
   var parul = $(this).children("ul");
   $('<li class="check">&nbsp;</li>').appendTo(parul);
});

$(document).on("click", "li.check", function(){
   $(this).siblings(":last").remove();
});

该表是由 jQ 动态生成的,因此我试图避免在选择器中使用 ID。另外,为什么我使用 .on(),因为据我了解,它将适用于不一定存在的 LI(如果我理解不正确,请纠正我!)。

我发现上述两个函数独立工作,但是当我取消注释它们时,只有“添加”函数起作用,而删除则不起作用。

我是 jQ 的新手,所以这真是一个谜。如果有一个完全不同的解决方案可以实现相同的目标,我不会介意,但出于学习目的,我还想了解为什么我的代码不能按我的预期工作。

提前致谢!

最佳答案

当您点击 li 时,td 也会记录一次点击。您需要在 li 处理程序上添加 stopPropagation():

$(function() {
    $(document).on("click", "li.check", function(e) {
        $(this).siblings(":last").remove();
        e.stopPropagation();
    });

    $(document).on("click", "table tr td", function() {
        var parul = $(this).children("ul");
        $('<li class="check">&nbsp;</li>').appendTo(parul);
    });
});

演示:http://jsfiddle.net/uLCRd/

这将阻止在处理 li 点击后调用第二个处理程序。

关于添加和删​​除 li 元素时的 jQuery 冲突(?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9897515/

相关文章:

javascript - 循环数组中的对象,显示 JSON 数据

javascript - jQuery DataTables - 子行和 "Undefined is Not a Function"

javascript - jQuery 查找符合条件的元素

javascript - 在 Kendo UI 中将网格 pageSize 设置为变量

javascript - 使用 JQuery 查找并使用 php 创建的表中的类

javascript - 从 JavaScript 中的 Json 数据中删除反斜杠

javascript - 在不可能使用 $(this) 时定位单个元素

php - JQuery 读取 Cookie 并将其传递给 PHP 变量?

php - 使用 Ajax 和 PHP 访问 mySQL 字段

javascript - 将确认 Bootstrap 模式/对话框添加到复选框