我的HTML是这样的:
<h2><a href="#" id="addScnt">Add Another Input Box</a></h2>
<div id="p_scents">
<p>
<label for="p_scnts"><input type="text" id="p_scnt" size="20" name="p_scnt" value="" placeholder="Input Value" /></label>
</p>
</div>
我的JavaScript是这样的:
$(function() {
var scntDiv = $('#p_scents');
var i = $('#p_scents p').length + 1;
$('#addScnt').on('click', function() {
$('<p><label for="p_scnts"><input type="text" id="p_scnt" size="20" name="p_scnt_' + i +'" value="" placeholder="Input Value" /></label> <a href="#" id="remScnt">Remove</a></p>').appendTo(scntDiv);
i++;
return false;
});
$('#remScnt').on('click', function() {
if( i > 2 ) {
$(this).parents('p').remove();
i--;
}
return false;
});
});
我的演示和完整脚本是这样的:http://jsfiddle.net/4nvc0jmb/
如果单击添加输入文本,则可以使用,但是如果单击删除输入文本,则不能使用。我在控制台上检查,但没有错误
我怎么解决这个问题?
最佳答案
元素ID应该是唯一的,因此最好使用类或其他属性来标识您的元素(如果有多个)。
您还需要在文档中已存在的对象上注册event-lsitener。并使用您想要使用此事件监听器的对象的类型来过滤该事件监听器...否则,event-lsitener仅适用于注册该事件监听器时存在的对象。
我为使其运行而进行的更改:
我将按钮ID更改为class。
在文档元素上注册事件监听器,并针对该按钮类进行过滤。
$(function() {
var scntDiv = $('#p_scents');
var i = $('#p_scents p').length + 1;
$('#addScnt').on('click', function() {
$('<p><label for="p_scnts"><input type="text" id="p_scnt" size="20" name="p_scnt_' + i +'" value="" placeholder="Input Value" /></label> <a href="#" class="remScnt">Remove</a></p>').appendTo(scntDiv);
i++;
return false;
});
$(document).on('click', '.remScnt', function() {
if( i > 2 ) {
$(this).parents('p').remove();
i--;
}
return false;
});
});
* { font-family:Arial; }
h2 { padding:0 0 5px 5px; }
h2 a { color: #224f99; }
a { color:#999; text-decoration: none; }
a:hover { color:#802727; }
p { padding:0 0 5px 0; }
input { padding:5px; border:1px solid #999; border-radius:4px; -moz-border-radius:4px; -web-kit-border-radius:4px; -khtml-border-radius:4px; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h2><a href="#" id="addScnt">Add Another Input Box</a></h2>
<div id="p_scents">
<p>
<label for="p_scnts"><input type="text" id="p_scnt" size="20" name="p_scnt" value="" placeholder="Input Value" /></label>
</p>
</div>
关于javascript - 为什么动态删除多个输入文本不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56312816/