[英]Jquery click event not firing on the element created dynamically using jquery
我正在尝试创建一个简单的功能,用户从下拉列表中选择一些值,然后单击添加按钮以标记的形式在下面的div中添加所选项目。
每个添加的标记都有一个删除锚点,单击它时会删除标记。
现在,当点击添加按钮时,正确插入了标签,但是当我点击标签上的删除按钮时,点击事件未触发。
但是,如果我使用与动态生成的标记完全相同的标记对某些标记进行硬编码,则删除标记的click事件会正确触发,并且标记将按照我的意愿删除。
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
提前致谢
请改用甚至代表团
事件委托允许我们将单个事件侦听器附加到父元素,该元素将为匹配选择器的所有子项触发,无论这些子项现在是存在还是将来添加。
$(document).on('click', '.remove', function () {.....
$("#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”选择器匹配的该元素的子元素。
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);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.