0

我有一个 jquery 代码块的问题。我有一个简单的 jsp 页面,并且有一个搜索按钮来搜索特定项目。当您单击该搜索按钮时,将根据您在该字段中提供的项目 ID 调用 ajax 请求,然后它从服务器检索信息并填充该页面上的其他字段。现在有一个价格字段,并且有一个复选框。我的逻辑(jquery)要求当价格不为0时,价格将显示在价格字段中,复选框将被选中,并且在该jsp页面上,价格应写入特定位置。但我的问题是,如果价格不为 0,则选中复选框,并且价格也会写在页面上,但如果我随后取消选中复选框,则价格应该' 当我取消选中该复选框时,不再显示在该页面上,这在第一次(加载页面后)不会发生。但是如果然后我再次检查然后再次取消选中,那么它工作正常,例如如果选中复选框则显示,如果未选中复选框则不会显示。所以问题是当我第一次尝试取消选中复选框时逻辑不起作用。我只在 IE(版本 8)中遇到这个问题,而不是在 Mozilla 中。这是您更好地理解的代码片段... 我只在 IE(版本 8)中遇到这个问题,而不是在 Mozilla 中。这是您更好地理解的代码片段... 我只在 IE(版本 8)中遇到这个问题,而不是在 Mozilla 中。这是您更好地理解的代码片段...

示例.jsp

<table id="item_search">
<tr><td><label>Item Id : </label></td><td><input type="text" id="item_id"   name="item_id"></td>
<td><input type="button" id="item_search" value="item Info"></td>

<tr><td><label>Price :</label></td>
<td ><input type="text" id="item_price" name="item_price"><input type="checkbox" id="item_isprice" name="item_isprice"></input></td>
<legend>Label</legend>
<div id="label_preview">
<div class="price"> </div>

示例.js

$("#item_search").bind("click",function() 
{$.getJSON("----some url-----",
{
       id : $("#item_id").val(),
}, iteminforeturn);
});

$("#item_isprice").change(refreshlabel);

function iteminforeturn(json) {
   $("#item_price").val(json['price']);
   refreshlabelFirst();
}

function refreshlabelFirst(event){
if($("#item_price").val() != 0 ){
    $("#item_isprice").attr("checked",true);
    $("#label_preview .price").html("price : " + $("#item_price").val());
} else {
    $("#item_isprice").attr("checked",false);
    $("#label_preview .price").html("");
}
 }

function refreshlabel(event) {
    if($("item_price").val() != "" && $('#item_isprice').is(':checked')){
    $("#label_preview .price").html("price In : " + $("#item_price").val());
} else {
    $("#label_preview .price").html("");
}
}
4

1 回答 1

0

令人困惑的是,这些不会达到您的预期:

attr('checked', true)
attr('checked', false)

相反,您只需将这些语句替换为:

attr('checked', 'checked')
removeAttr('checked')

如果你使用 jQuery 1.6 或更高版本,你也可以使用prop()

于 2013-07-16T14:14:18.457 回答