Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery事件以意外顺序执行代码_Javascript_Jquery_Events - Fatal编程技术网

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中的标记不同。这是代码中不起作用部分的简化版本。我也更新了粘贴箱。