Javascript JQuery事件在循环中提前触发
我有一个多输入的表单。我在顶部有一个下拉列表,其中列出了记录ID。当有人选择一个记录ID时,会触发一个ajax请求并返回该记录的属性。然后,我用所述属性动态填写表单。返回的属性之一是电子邮件数组。我不知道会退回多少 我的Javascript JQuery事件在循环中提前触发,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个多输入的表单。我在顶部有一个下拉列表,其中列出了记录ID。当有人选择一个记录ID时,会触发一个ajax请求并返回该记录的属性。然后,我用所述属性动态填写表单。返回的属性之一是电子邮件数组。我不知道会退回多少 我的.doneajax响应中有一个循环。我想在返回的每封电子邮件上创建一个事件处理程序,允许用户从表单中删除该电子邮件。我的问题是,当ajax响应加载到DOM中时,会触发我的事件,即使该事件是一个onclick事件 有人知道为什么“删除电子邮件”功能会在加载时而不是单击时启动吗 请参
.done
ajax响应中有一个循环。我想在返回的每封电子邮件上创建一个事件处理程序,允许用户从表单中删除该电子邮件。我的问题是,当ajax响应加载到DOM中时,会触发我的事件,即使该事件是一个onclick
事件
有人知道为什么“删除电子邮件”功能会在加载时而不是单击时启动吗
请参阅下面的代码:
...
$form_post.done(function(data) {
$('#button').button('reset');
//success information here
data = JSON.parse(data);
for(var i = 0; i < data.emails.length; i++){
$('#li_' + data.emails[i].id).on('click','#icon_' + data.emails[i].id,delete_email(data.emails[i].id));
}
});
function delete_email($id){
alert('hit');
$('#li_' + $id).hide();
$('#hidden_' + $id).val('');
}
回答-这就是最终有效的方法。感谢@Tushar帮助我解决问题
(function (i) {
$('#li_' + data.emails[i].id).on('click', '#icon_' + data.emails[i].id, function () {
delete_email(data.emails[i].id);
});
}(i));
delete_电子邮件
在单击
事件时是否显示为被调用,而不是被名称引用
尝试用函数.prototype.bind()
替换调用delete\u email
,将数据.email[i].id
作为参数传递
for(var i = 0; i < data.emails.length; i++){
(function (i) {
$('#li_' + data.emails[i].id)
.on('click', '#icon_' + data.emails[i].id
, delete_email.bind(null, data.emails[i].id)
);
}(i));
}
for(var i=0;i
功能删除电子邮件($id){
console.log($id)
}
var arr=[“a”、“b”、“c”];
对于(变量i=0;i
Changedelete_-email(data.emails[i].id)
tofunction(){delete_-email(data.emails[i].id)})代码>请参阅以获取解释我无法通过匿名函数引用我的数据.emails[i].id
。这就是为什么我把它自己搬出去,这样我就可以给它发送一个值。我该如何解决这个问题呢?用函数包装它,看看你也必须使用匿名函数,看看我的第一条评论。同时检查fiddle中的代码,完全按照原样使用它。您的fiddler有一个小的输入错误,但是,它工作了!你可以发布你的答案,我会把它标记为有效!还建议匿名函数使用param调用函数,我总是避免使用bind
,因为它会将您以前的上下文抛出窗口,以防OP/您仍然想要访问它,您无法取回它
for(var i = 0; i < data.emails.length; i++){
(function (i) {
$('#li_' + data.emails[i].id)
.on('click', '#icon_' + data.emails[i].id
, delete_email.bind(null, data.emails[i].id)
);
}(i));
}