为什么这个if/else在我的jQuery中不起作用?

问题描述:

当复选框被更改时,我有以下内容。为什么这个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再次运行?

!=代替!==

而且也该尝试作为替代:

$('#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

IE中的复选框显然存在一些与change()事件有关的错误。尝试使用click()事件,看看它是否更好。

+1

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

+0

我改变了点击(),没有去...它第一次点击复选框,但如果我再次点击它,它不会触发。 – Jason 2010-01-06 17:11:13

您通常希望使用click事件来跟踪复选框/单选按钮的更改。如果新值与旧值不同,则只触发change事件。在复选框/单选按钮中,没有初始值的含义,只有checked属性通常没有预先定义,因此需要在更改事件触发前点击两次。

在复选框/单选按钮中,您也不想通过val()检查值,它总是相同的。您宁愿要使用this.checked检查已检查的状态。

因此,下面应该工作:

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