动态创建的DOM操作按钮未触发事件
Dynamically created DOM manipulation button not firing event
我有一个函数可以添加和删除字段,但remove函数无法正常工作。
HTML:
<div id="parts">
Part
<input type="text" id="auto_part" name="auto_part" />
<br />
Description
<input type="text" id="auto_description" name="auto_description" />
<br />
</div>
<a href="#" id="addField">Add another part</a>
jQuery:
$(function() {
var scntDiv = $('#parts');
var i = $('#parts input').size();
$('#addField').on('click', function() {
$('<br /><div id="parts"><span>Part</span> <input type="text" id="auto_part'+i+'" name="auto_part'+i+'" /><br />').appendTo(scntDiv);
$('<span>Description</span> <input type="text" id="auto_description'+i+'" name="auto_description'+i+'" /> <br />').appendTo(scntDiv);
$('<input type="hidden" id="row_count" name="row_count" value="" />').appendTo(scntDiv);
$('<a href="#" id="removefield">Remove</a></div>').appendTo(scntDiv);
i++;
return false;
});
$('#removefield').on('click', function() {
if( i > 2 ) {
$(this).parents('div').remove();
i--;
}
return false;
});
});
问题一定与这条线有关:
$('#removefield').on('click', function() {
它不能通过那个条件。当我点击删除时,它什么也不做,只是滚动到顶部。
您正在将click
处理程序绑定到DOM中存在的元素。但是,您的#removefield
元素是动态添加的。因此,事件处理程序没有附加到它
您可以使用.on()
来使用事件委派,还可以处理未来的元素。此外,您可能希望使用类名而不是和id
属性。id
属性需要是唯一的,但是可以将类名设置为任意多的元素。
<a href="#" class="removefield">Remove</a>
$("#parts").on("click", ".removefield", function() {
/* ... */
});
"Remove"
链接不起作用的原因是,您正在逐部分添加动态<div>
元素,从而使其成为无效标记。你应该一次把它们加在一起。例如,
$('#addField').on('click', function () {
var part = '<div id="parts' + i + '"><span>Part</span> <input type="text" id="auto_part' + i + '" name="auto_part' + i + '" /><br/>' +
'<span>Description</span> <input type="text" id="auto_description' + i + '" name="auto_description' + i + '" /> <br />' +
'<input type="hidden" id="row_count' + i + '" name="row_count' + i + '" value="" />' +
'<a href="#" class="removefield' + i + '">Remove</a></div>';
scntDiv.after(part);
i++;
return false;
});
$(document).on("click", ".removefield", function() {
if( i > 2 ) {
$(this).parent('div').remove();
i--;
}
return false;
});
你可以在这里看到。
尝试
$('#removefield').live("click", function() {
相关文章:
- ASP.NET通过单击JavaScript按钮触发c#事件
- 当我点击jsf中的primefaces命令按钮时,如何获得点击事件
- 鼠标悬停事件影响列表中所有行中的按钮,而不仅仅是特定按钮
- 如何在不单击javascript中的按钮的情况下触发事件
- 如何隐藏按钮单击事件上的占位符
- 如何使用for循环添加所有按钮'单击事件
- 单击按钮前运行事件
- 主干点击事件按钮不工作
- 切换事件按钮
- 从javascript onclick事件按钮调用c函数
- 点击加载事件按钮
- 在.remove()和.append()之后返回我的事件按钮
- 如何在javascript中启用或禁用文本框的按键事件按钮
- 如何添加onclick事件按钮在yii引导(http://www.cniska.net/yii-bootstrap/#t
- 如何打开弹出窗口旁边的事件按钮-如何获得鼠标光标位置onclick
- 单击事件按钮正在发送图标作为目标
- 添加要提交的事件按钮
- Jquery移动处理器事件按钮
- Js移动网络事件按钮
- 为什么在HTML按钮的属性窗口中没有事件按钮