为什么这个切换复选框功能在jQuery 1.3.2中工作,但在1.6.2中不起作用?

时间:2011-09-23 19:02:42

标签: jquery css

此代码只是切换复选框并调整文本框css。默认情况下,文本框是只读的,然后当您单击复选框时,它应调整只读并突出显示文本框。

以下代码在1.3.2中工作正常,但在1.6.2中没有做任何事情。有什么变化吗?

$(document).ready(function() {
    $("#toggleAll").click(function() {
        var $checkBoxes = $("input:checkbox.closeItem");
        $checkBoxes.attr("checked", $(this).attr("checked"));

       $("input:checkbox.closeItem").each(function() {
            HandleCheckboxCheck($(this));
        });
    });

    $("input:checkbox.closeItem").click(function() {
        HandleCheckboxCheck($(this));
     });

});
function HandleCheckboxCheck($check) {
    var $trackingNumber = $check.parent().siblings("td.trackingNumber").children(0);
        if ($check.attr("checked") == true) {
            $check.attr("checked", true);
            $trackingNumber.addClass("highlight");
            $trackingNumber.removeAttr("readonly");
            $trackingNumber.val("");
        } else {
            $check.attr("checked", false);
            $trackingNumber.removeClass("highlight");
            $trackingNumber.attr("readonly", "readonly");
            $trackingNumber.val("Check to Enable");
        }
    }

2 个答案:

答案 0 :(得分:3)

.prop是切换复选框的正确方法。

http://api.jquery.com/prop/

本节介绍.attr的行为:

$(elem).attr(“checked”)(1.6)“checked”(字符串)复选框的初始状态;不会改变 $(elem).attr(“checked”)(1.6.1+)“checked”(字符串)将随复选框状态而变化 $(elem).attr(“checked”)(pre-1.6)true(布尔值)已更改为复选框状态

答案 1 :(得分:2)

在jQuery 1.6.2中,为复选框测试.attr('checked')会返回“已选中”或undefinedhttp://jsfiddle.net/wkDgv/5/

在jQuery 1.3.2中,它返回truefalsehttp://jsfiddle.net/wkDgv/4/

您的示例代码询问{​​{1}} - 这在jQuery 1.6.2中永远不会发生。 http://jsfiddle.net/wkDgv/6/

但是,如果您仅使用if ($check.attr("checked") == true)替换该代码,则应获得相同的结果。