2010-01-06 86 views
2

當複選框被更改時,我有以下內容。爲什麼這個if/else在我的jQuery中不起作用?

$(document).ready(function() { 
    $("#reviewed").change(function(){ 
     if ($('#reviewed:checked').val() !== null) { 
      $.ajax({ 
       url: "cabinet_reviewed.php?reviewed=yes", 
       cache: false, 
       success: function(html){ 
        $("#reviewDate").replaceWith(html); 
       } 
      }); 
     } else { 
      $.ajax({ 
       url: "cabinet_reviewed.php?reviewed=no", 
       cache: false, 
       success: function(html){ 
        $("#reviewDate").replaceWith(html); 
       } 
      }); 
     } 
}); 
}) 

這隻能工作一次。我正在查看複選框何時發生更改以及它的值何時更改。

更新: 我已經改變周圍的代碼如下(根據大家的意見)

$(document).ready(function() { 
    $("#reviewed").click(
     function() { 
      var rURL = 'cabinet_reviewed.php?reviewed='; 
       if ($("#reviewed").is(":checked")) 
        rURL = rURL + "yes"; 
       else 
        rURL = rURL + "no"; 
       alert (rURL); 
     $.ajax({ 
      url: rURL, 
      cache: false, 
      success: function(html){ 
       $("#reviewDate").replaceWith(html); 
      } 
     }); 

    }); 

})

文件cabinet_reviewed.php只是回聲的$ _GET [價值」已審覈'] 使用此更新後的代碼,警報會顯示正確的URL,但第二次點擊不會運行.ajax。 我需要做些什麼才能讓.ajax再次運行?

回答

5

!=代替!==

而且也該嘗試作爲替代:

$('#reviewed').is(':checked') 

下面的代碼工作始終在FF 3.5和IE8:

$("#reviewed").click(
    function() { 
     if ($("#reviewed").is(":checked")) 
      alert('checked'); 
     else 
      alert('not checked'); 
    } 
);    

您更新後:

This code ...

success: function(html){ 
    $("#reviewDate").replaceWith(html); 
} 

...與ID=reviewDate替換元素與從Ajax調用返回的HTML DOM中,因此它不再存在Ajax調用由第二次。

會更簡單這樣的工作嗎?

success: function(html){ 
    $("#reviewDate").html(html); 
} 
+0

由於某種原因$('#reviewed')。is(':checked')似乎對我無效。 – Jason 2010-01-06 17:12:44

+0

編輯添加完整示例。這一直在FF/IE中運行。您是否使用了不同的瀏覽器,我可以嘗試? – JonathanK 2010-01-06 17:23:26

+0

我在MAC上的FF 3上 - 您的示例適用於警報,但我原來的.ajax不適用 - 它只在第一次點擊時起作用。 – Jason 2010-01-06 17:31:41

5

IE中的複選框顯然存在一些與change()事件有關的錯誤。嘗試使用click()事件,看看它是否更好。

+1

+1好消息! – JonathanK 2010-01-06 17:02:25

+0

我改變了點擊(),沒有去...它第一次點擊複選框,但如果我再次點擊它,它不會觸發。 – Jason 2010-01-06 17:11:13

1

您通常希望使用click事件來跟蹤複選框/單選按鈕的更改。如果新值與舊值不同,則只觸發change事件。在複選框/單選按鈕中,沒有初始值的含義,只有checked屬性通常沒有預先定義,因此需要在更改事件觸發前點擊兩次。

在複選框/單選按鈕中,您也不想通過val()檢查值,它總是相同的。您寧願要使用this.checked檢查已檢查的狀態。

因此,下面應該工作:

$(document).ready(function() { 
    $("#reviewed").click(function() { 
     if (this.checked) { 
      // ... 
     } else { 
      // ... 
     } 
    }); 
});