【问题标题】:Jquery click event not firing on the element created dynamically using jqueryJquery单击事件未在使用jquery动态创建的元素上触发
【发布时间】:2014-05-01 20:20:22
【问题描述】:

我正在尝试做一个简单的功能,用户从下拉列表中选择一些值,然后单击添加按钮以标签的形式在下面的 div 中添加所选项目。

每个添加的标签都有一个删除锚点,单击该锚点会删除标签。

现在当点击添加按钮时,标签被正确插入, 但是当我点击标签上的删除按钮时,点击事件没有触发。

但是,如果我用与动态生成的标签完全相同的标记对一些标签进行硬编码,则删除标签的点击事件会正确触发,并且会按照我的意愿删除标签。

HTML:

    <select id="ddlTagName">
    <option value="1">Tag One</option>
    <option value="2">Tag Two</option>
    <option value="3">Tag Three</option>
</select>
<input id="btnInsertTag" type="button" value="Add"/>
<br/>

<div id="TagsHolder">
  <span class="tag">
      <span>Tag One HardCoded </span>
      <a class="remove">X</a>
  </span>

  <span class="tag">
      <span>Tag Two HardCoded </span>
      <a class="remove">X</a>
  </span>
</div>

JS:

    $("#btnInsertTag").click(function () {
    var selectedTagText = $("#ddlTagName option:selected").text();
    var selectedTagValue = $('#ddlTagName').val();
    var generateMarkup = '<span class="tag" data-value="' + selectedTagValue + '"><span>' + selectedTagText + ' </span><a class="remove">X</a></span>';
    $("#TagsHolder").append(generateMarkup);
});

$(".remove").click(function () {
    alert('click event triggered');
    $(this).parent(".tag").remove();
});

我的问题是为什么 click 事件 没有为 动态生成的 标签触发。

这里是Demo

提前致谢

【问题讨论】:

标签: javascript jquery html


【解决方案1】:

改用偶数委托

事件委托允许我们将单个事件侦听器附加到 父元素,将为匹配选择器的所有子元素触发, 这些孩子是现在存在还是将来添加。

More info

$(document).on('click', '.remove', function () {.....

【讨论】:

    【解决方案2】:

    jQuery .click 不适用于您需要绑定事件的动态创建的 html 元素。这是执行此操作的代码。

    $("body").on("click", "#btnInsertTag", function(e){
    
     var selectedTagText = $("#ddlTagName option:selected").text();
     var selectedTagValue = $('#ddlTagName').val();
     var generateMarkup = '<span class="tag" data-value="' + selectedTagValue + '"><span>' + selectedTagText + ' </span><a class="remove">X</a></span>';
     $("#TagsHolder").append(generateMarkup);
    
    });
    

    【讨论】:

      【解决方案3】:
      $("#btnInsertTag").on('click',  function () {
        var selectedTagText = $("#ddlTagName option:selected").text();
        var selectedTagValue = $('#ddlTagName').val();
        var generateMarkup = '<span class="tag" data-value="' + selectedTagValue + '"><span>' +   selectedTagText + ' </span><a class="remove">X</a></span>';
        $("#TagsHolder").append(generateMarkup);
      });
      $(document).on('click', ".remove", function () {
             alert('click event triggered');
         $(this).parent(".tag").remove();
      });
      

      事件绑定不适用于动态生成的元素。为此,您需要绑定到 JS 运行时存在的元素(即文档),并在 .on() 的第二个参数中提供选择器。当单击文档元素时,jQuery 会检查它是否应用于与“.remove”选择器匹配的该元素的子元素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 2012-02-14
        • 2012-11-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多