我的一些代码以意外顺序执行时出现问题。我有两个按钮,每个按钮都有一个绑定到click事件的函数。一个按钮是“取消”,它会进行一些显示更改。第二个按钮是“完成”,它通过将更改写入隐藏的输入字段来保存更改,然后在“取消”上触发事件处理程序。这就是我的代码。
/*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();
}
我期望发生的是当我点击“完成”链接时,它会从所有复选框中找到值并将它们写入#my_input。然后它会点击取消链接,删除所有复选框。相反的是,首先删除所有复选框,然后将空字符串作为值写入。
有任何帮助吗?我不明白为什么会这样。
答案 0 :(得分:1)
我已经解决了这个问题。事实证明,事件处理程序被其他地方的代码触发了两次。我上面粘贴的代码实际上工作正常。 自责
感谢您的帮助。
答案 1 :(得分:0)
看起来像这一行
$("#cancellink").triggerHandler('click');
不等待$.map
和后续值设置在执行前完成。您可以引入一个回调函数,等待在继续之前设置值。
您是否可以在jsbin上发布代码的succint演示,以便我们查看一下?
作为旁注
您不能依赖按特定顺序执行的事件处理程序,因为无法保证执行顺序。