为什么这个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);
}
答
您通常希望使用click
事件来跟踪复选框/单选按钮的更改。如果新值与旧值不同,则只触发change
事件。在复选框/单选按钮中,没有初始值的含义,只有checked
属性通常没有预先定义,因此需要在更改事件触发前点击两次。
在复选框/单选按钮中,您也不想通过val()
检查值,它总是相同的。您宁愿要使用this.checked
检查已检查的状态。
因此,下面应该工作:
$(document).ready(function() {
$("#reviewed").click(function() {
if (this.checked) {
// ...
} else {
// ...
}
});
});
由于某种原因$('#reviewed')。is(':checked')似乎对我无效。 – Jason 2010-01-06 17:12:44
编辑添加完整示例。这一直在FF/IE中运行。您是否使用了不同的浏览器,我可以尝试? – JonathanK 2010-01-06 17:23:26
我在MAC上的FF 3上 - 您的示例适用于警报,但我原来的.ajax不适用 - 它只在第一次点击时起作用。 – Jason 2010-01-06 17:31:41