2010-01-11 107 views
0

我遇到了一些我的代碼以意外的順序執行的問題。我有兩個按鈕,每個按鈕都有一個綁定到click事件的函數。一個按鈕是'取消',它會改變一些顯示。第二個按鈕是「完成」,它通過將它們寫入隱藏的輸入字段來保存更改,然後在「取消」時觸發事件處理程序。這是我的代碼看起來像。jQuery事件以意外的順序執行代碼

/*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。然後它會打到取消鏈接,刪除所有複選框。相反的情況是所有的複選框首先被刪除,然後將一個空字符串作爲值寫入。

任何幫助?我不明白爲什麼會發生這種情況。

回答

1

我解決了這個問題。原來問題是事件處理程序被別處的代碼觸發兩次。我上面粘貼的代碼實際上工作正常。 自拍

感謝您的幫助。

0

它看起來像這條線

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

不是等着設定執行前完成$.map和隨後的值。你可以引入一個回調函數,在繼續之前等待值的設置。

您可以發佈一個代碼到目前爲止的漸進式演示jsbin,以便我們可以看看嗎?

作爲一個側面說明
你不能依賴於特定的順序執行的事件處理程序,執行的順序是不能保證。

+0

http://jsbin.com/ufepu/edit 下面是代碼大致看起來像的一個pastebin。我怎麼能引入一個回調等待地圖功能?它不接受另一個回調參數。 – albertsun 2010-01-11 20:49:47

+0

謝謝 - 什麼元素是$(「。ledgerline input:checkbox:checked」)。parent()。parent()'? jsbin上的標記與您在頁面中的標記相同嗎? – 2010-01-11 21:39:48

+0

該元素是元素。它有一個.toggle()事件處理程序。 jsbin中的標記是不一樣的。它是代碼不起作用的簡化版本。我也更新了pastebin。 – albertsun 2010-01-11 21:53:34