Javascript jQuery事件以意外顺序执行代码
我的一些代码以意外顺序执行时出现问题。我有两个按钮,每个按钮都有一个绑定到单击事件的函数。一个按钮是“取消”,它会对显示进行一些更改。第二个按钮是“完成”,它通过将更改写入隐藏的输入字段来保存更改,然后在“取消”时触发事件处理程序。这就是我的代码的样子Javascript jQuery事件以意外顺序执行代码,javascript,jquery,events,Javascript,Jquery,Events,我的一些代码以意外顺序执行时出现问题。我有两个按钮,每个按钮都有一个绑定到单击事件的函数。一个按钮是“取消”,它会对显示进行一些更改。第二个按钮是“完成”,它通过将更改写入隐藏的输入字段来保存更改,然后在“取消”时触发事件处理程序。这就是我的代码的样子 /*done link*/ $("#donelink").bind('click', function() { var idvalues = $.map($(".ledgerline input:checkbox:checked"),
/*done link*/
$("#donelink").bind('click', function() {
var idvalues = $.map($(".ledgerline input:checkbox:checked"), function(el, i) {
return $(el).val().toString();
}).join(',');
$("#my_input").val(idvalues);
$("#cancellink").triggerHandler('click');
});
/*cancel link*/
$("#cancellink").bind('click', function() {
/*some basic css and other property changes*/
$(".ledgerline input:checkbox:checked").parent().parent().trigger('click');
});
/* The function bound to this event:
$(".ledgerline input:checkbox:checked").parent().parent().trigger('click');
*/
function {
/* other stuff */
$(this).find("input:checkbox").remove();
}
我期望发生的是,当我点击“完成”链接时,它会从所有复选框中找到值,并将它们写入“我的输入”。然后它将点击取消链接,删除所有复选框。取而代之的是,首先删除所有复选框,然后写入一个空字符串作为值
有什么帮助吗?我不明白为什么会发生这种情况。看起来像这条线
$("#cancellink").triggerHandler('click');
在执行之前,不会等待$.map
和后续值设置完成。您可以引入一个回调函数,在继续之前等待设置值
你能发布一个简洁的代码演示,让我们看看吗
作为旁注您不能依赖事件处理程序以特定的顺序执行,因为不能保证执行顺序。我已经解决了这个问题。问题是,事件处理程序被其他地方的代码触发了两次。我上面粘贴的代码实际上运行良好。打自己
不过还是要感谢您的帮助。下面是代码大致外观的粘贴箱。如何引入回调来等待map函数?它不接受另一个回调参数。谢谢-什么元素是
$(“.ledgerline输入:复选框:选中”).parent().parent()
?jsbin上的标记是否与页面中的标记相同?该元素就是元素。它有一个.toggle()事件处理程序。jsbin中的标记不同。这是代码中不起作用部分的简化版本。我也更新了粘贴箱。