动态创建的元素上的事件侦听器仅对第一个结果起作用
Event Listener on dynamically created elements only working for first result
我让我的事件侦听器处理动态创建的HTML,但我遇到的问题是它总是只侦听第一个结果。
例如,值"this.id"不同;
IMAGE(隐藏值='3')
IMAGE(隐藏值="6")
IMAGE(隐藏值="8")
但是,无论我单击的图像是什么,都始终选择值3。我该如何解决这个问题?
HTML
<div id="test"></div>
JavaScript(动态创建HTML)
var html =
'<form action="test.php" method="get" id="myForm">' +
'<input type="hidden" name="mID" value"' + this.id + '"/>' +
'<input type="image" id="send" src="this.image" name ="send" alt="submit"/>' +
'</form>';
$('div#test').append(html);
AJAX
$("#test").on('click', '#send', function(e) {
e.preventDefault();
$.get( $("#myForm").attr("action"),
$("#myForm :input").serializeArray(),
function(data) {
console.log(data);
});
$("#myForm").submit( function() {
return false;
});
});
问题是对多次添加的元素使用静态ID。元素的ID在文档中必须是唯一的,ID选择器将只获取具有给定ID的第一个元素。因此,在您的情况下,当您说#myForm
时,它将始终返回页面中的第一个myForm
。
相反,您可以使用类选择器,并且可以使用类似于的closest()
查找单击的send
元素所属的窗体
var html =
'<form action="test.php" method="get" class="myForm">' +
'<input type="hidden" name="mID" value="' + this.id + '"/>' +
'<input type="image" class="send" src="this.image" name ="send" alt="submit"/>' +
'</form>';
$('div#test').append(html);
$("#test").on('click', '.send', function(e) {
e.preventDefault();
var $form = $(this).closest('form');
$.get($form.attr("action"), $form.find(":input").serializeArray(), function(data) {
console.log(data);
});
});
$("#test").on('submit', '.myForm', function(e) {
return false;
});
相关文章:
- If语句只执行第一个条件并运行其他条件,但没有结果
- 与网络界面相比,谷歌搜索API有时会重复第一个结果,有时会重复第二个结果
- 仅在第一个结果中显示/隐藏MySQL结果函数
- 承诺,如果第一个失败,则返回第二个承诺结果
- 动态创建的元素上的事件侦听器仅对第一个结果起作用
- 为什么在给出第一个结果后仍然调用此方法
- 如何对select2自动完成结果进行排序,只显示以第一个字母开头的项目
- AJAX 实时搜索仅当结果以相同的第一个字母开头时才显示结果
- 如何在集合中的项上触发 jQuery 事件(意外的 jQuery 结果来自 $._data() 与集合的第一个元素)
- jQuery.find() 只返回第一个结果
- 在“ng-repeat”中仅显示第一个和最后一个子项作为结果
- Phantom JS:第一个孩子返回正确结果的时间有一半
- 正则表达式第一个结果($ 1)替换为变量的属性
- 当不隐藏时,只显示sql的第一个结果
- Ember-Data objectAt()获取第一个结果不起作用
- 只能发布while循环的第一个结果
- 谷歌放置自动完成 - 在回车键上选择第一个结果
- jQuery实时搜索-在页面找到所有可用结果后返回到第一个结果
- 将另一个数组插入到for循环中,重复第一个结果
- execMatch只返回第一个结果