2013-04-28 118 views
0

我遇到了IE問題。在我的應用程序中,我有一個用戶可以顯示的對話框。該對話框使用來自AJAX調用的數據構建。然後,我爲該按鈕註冊一次事件處理程序。在FF,Chrome和Safari中,我沒有任何問題。對話框顯示並且按鈕起作用。這已經工作了很長時間。jQuery事件處理程序有時在IE中沒有觸發

在IE中,對話框顯示,但有時事件處理程序不會觸發。點擊按鈕不起作用。這並不總是發生。到目前爲止,這似乎發生在您打開IE後首次查看該頁面。關閉對話框並重新打開有時會修復它。重新加載頁面有時會修復它。一旦修復,無論頁面重新加載,似乎都不會再次失敗。必須退出IE才能使問題重新出現。我無法使用開發人員工具,因爲開發人員工具處於打開狀態時問題會消失。

$('#btn_school_choices').button('loading'); 

$.ajax({ 
    type: 'GET', 
    url: 'ajax/optimized_colleges.php', 
    dataType: 'json', 
    success: function(data, status, xhr) { 
    // Some code to prepare the data returned 

    // Build the dialog using the data and add to DOM 
    $('#modal_opt_in').html(ich.dialog_optimize_college_selection(optinData)); 

    $('#btn_school_choices').button('reset'); 

    // Add Event Handler to Button in Dialog 
    $('#btn_add_colleges').one('click', function() { ... } 

    // Show the Dialog 
    $('#modal_opt_in').modal({backdrop: 'static', show: true}); 

    error: function(xhr) { ... } 
}); 

我嘗試過使用on()和off()並且發生同樣的問題。在這一點上,我一直試圖解決這個問題大約兩個星期。任何幫助,將不勝感激。

該按鈕應該在註冊事件處理程序時存在,因爲它被添加到前兩行的DOM中。 (即使事件處理程序失敗,對話框也會顯示按鈕,所以在註冊事件處理程序之前的兩行和事件處理程序之後的行之間。

+0

請嘗試將button.one()綁定到ajax調用之前的某個地方,並請發佈整個代碼 – Xerxes 2013-04-28 06:57:36

+0

什麼版本的IE?你可以發佈你的標記嗎? – albert 2013-04-28 07:00:14

+0

我的猜測是,你正試圖在ajax調用完成之前設置事件處理程序,因此對象不在DOM中。但是,您還沒有向我們展示足夠的代碼以確定知道。 – jfriend00 2013-04-28 08:03:21

回答

0

也許綁定文檔上的事件以確保它是沒有一個不存在的元素綁定問題引起的。

$(document).one('click', '#btn_add_collegues', function() { 
    // ... 
}); 
+0

這沒有效果。仍然展出了同樣的問題。 – 2013-04-28 22:07:30

1

的問題是,我已經離開事件處理程序的console.log調用。卸下的console.log調用固定的問題。這太糟糕了,IE並沒有給你任何跡象表明它不能處理這個調用,它只是靜靜地死去,調試是一個痛苦,因爲它只要你打開開發工具就可以工作。

相關問題