jQuery事件以意外顺序执行代码

时间:2010-01-11 20:32:51

标签: javascript jquery events

我的一些代码以意外顺序执行时出现问题。我有两个按钮,每个按钮都有一个绑定到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。然后它会点击取消链接,删除所有复选框。相反的是,首先删除所有复选框,然后将空字符串作为值写入。

有任何帮助吗?我不明白为什么会这样。

2 个答案:

答案 0 :(得分:1)

我已经解决了这个问题。事实证明,事件处理程序被其他地方的代码触发了两次。我上面粘贴的代码实际上工作正常。 自责

感谢您的帮助。

答案 1 :(得分:0)

看起来像这一行

$("#cancellink").triggerHandler('click');

不等待$.map和后续值设置在执行前完成。您可以引入一个回调函数,等待在继续之前设置值。

您是否可以在jsbin上发布代码的succint演示,以便我们查看一下?

作为旁注
您不能依赖按特定顺序执行的事件处理程序,因为无法保证执行顺序。