2015-01-13 154 views
3

我有以下腳本。 HTML不會動態添加。在99%的時間內,確認彈出窗口將打開,並且數據將在確認後發佈,但是每隔一段時間,複選框都會以可視方式更改狀態,但確認彈出窗口不會打開。我在Windows 7上運行的Firefox 34.0.5上目睹了這一點,並且尚未在其他瀏覽器上測試過。什麼原因導致jQuery點擊事件不總是觸發?

什麼可能導致這種情況發生,以及如何防止?

編輯。當我進入頁面並快速點擊複選框時,它總是發生。

<input type="checkbox" checked="" id="makePublic"> 

$(function() { 
    $("#makePublic").click(function(e){ 
     if($(this).is(":checked")){ 
      var status=1; 
      var message='Are you sure you wish to make this project public?'; 
     } 
     else { 
      var status=0; 
      var message='Are you sure you wish to make this project private?';    
     } 
     if(window.confirm(message)) { 
      $.post('update.php',{id:$('#id').val(),status:status}); 
     } 
     else {e.preventDefault(); 
      return; 
     } 
    }); 
}); 
+0

爲什麼在不換呢[文件準備(http://learn.jquery.com/using-jquery-core/document-ready/),我已經找到了工作時間的100% 。 –

+5

$(function()是文檔準備好的快捷方式 –

+1

我總是忘記快捷方式,因爲它不可讀.. –

回答

5

編輯。當我進入頁面並快速點擊複選框時,它總是發生。

然後,您應該禁用該元素,直到您的JavaScript完成。問題是複選框是可見的,沒有附加事件。我認爲最好的選擇是禁止點擊(通過設置禁用或隱藏等)直到事件被附加之後。

<input type="checkbox" checked="" id="makePublic" disabled="disabled"> 

$(function() { 
    $("#makePublic").click(function(e){ 
     if($(this).is(":checked")){ 
      var status=1; 
      var message='Are you sure you wish to make this project public?'; 
     } 
     else { 
      var status=0; 
      var message='Are you sure you wish to make this project private?';    
     } 
     if(window.confirm(message)) { 
      $.post('update.php',{id:$('#id').val(),status:status}); 
     } 
     else {e.preventDefault(); 
      return; 
     } 
    }); 

    $("#makePublic").prop('disabled',''); 

}); 
+0

正確!!!!!!!!!謝謝! – user1032531

+0

您可以隱藏它,但我更喜歡顯示一個禁用的元素。有多種方法可以防止事件處理程序被連接之前的點擊 –

+0

Doesn不會退化得很好,但我對此很好。 – user1032531

相關問題