Jquery prop函数未按预期工作

时间:2012-09-12 12:03:46

标签: javascript jquery

我试图根据一些计算和使用jquery启用/禁用一些隐藏字段 prop函数,这是代码

function enableSelectedFieldsData(count, mapKey, index) {
    $("#code_" + mapKey + "_" + index).prop("disabled", false);
    $("#description_" + mapKey + "_" + index).prop("disabled", false);
    $("#crossRefrence_" + mapKey + "_" + index).prop("disabled", false);
    $("#image_" + mapKey + "_" + index).prop("disabled", false);
    $("#price_" + mapKey + "_" + index).prop("disabled", false);
    // disable all other fields
    for (var i = 0; i < count; i++) {
        if (i != index) {
            $("#code_" + mapKey + "_" + i).prop("disabled", true);
            $("#description_" + mapKey + "_" + i).prop("disabled", true);
            $("#crossRefrence_" + mapKey + "_" + i).prop("disabled", true);
            $("#image_" + mapKey + "_" + i).prop("disabled", true);
            $("#price_" + mapKey + "_" + i).prop("disabled", true);
        }
    }
}

最初我为所有字段设置disable = true并根据选择我试图在禁用其他字段时启用所选字段,因为据我所知,禁用字段从未在提交表单时提交给服务器,但在我的他们正在提交的案例。

在使用firebug进行检查时,我发现非选定项目的禁用字段值设置为"",如disable=""

我不确定我在哪里设置错误,在这方面的任何帮助或指针都会有所帮助。

修改

我已从生成的HTML中取出相关部分并将其放在jsfiddle 请看看

3 个答案:

答案 0 :(得分:5)

你有prop()吗?

prop()已添加到 jQuery 1.6 中,并按以下方式使用:

$("input").prop('disabled', true);
$("input").prop('disabled', false);

如果您使用 jQuery 1.5.x 或更低版本,则可以使用attr()代替jQuery网站中的FAQ - How to enable/disable form elements

// Disable #x
$('#x').attr('disabled', true);

// Enable #x
$('#x').attr('disabled', false);

// -- or --

// Disable #x
$("#x").attr('disabled', 'disabled');

// Enable #x
$("#x").removeAttr('disabled');

假设您使用的是jQuery 1.6或更高版本

你的语法看起来很好。 我猜你的问题很可能是不正确的选择器。

要验证选择器是否包含您期望的元素引用:

 // output the selector to the console
console.log($("#code_" + mapKey + "_" + index));

如果您在浏览器的调试控制台中看到一个元素,那么您正在查看有效的选择器,如果您看到[],则您的选择器无效。

或者,您可以使用length属性进行检查,然后发出警告:

// alert out the length of the jQuery selector
alert($("#code_" + mapKey + "_" + index).length);

如果您看到0,那么您的选择器无效,如果您看到1或更多,那么您的选择器是正确的。

答案 1 :(得分:1)

HTML中的disabled属性与(大多数)其他属性略有不同,因为单独存在就足以禁用该元素。

<input type="text" name="test" disabled>
<input type="text" name="test" disabled="">
<input type="text" name="test" disabled="true">
<input type="text" name="test" disabled="false">

这些元素都将被禁用(是的,甚至是disabled="false"的元素),因为HTML中存在disabled属性。如果您在调用

后在Firebug的HTML标签中看到disabled=""
.prop('disabled', true);

然后这是正确的行为,元素被禁用。尽管被禁用,仍有其他原因仍在提交。

答案 2 :(得分:0)

我发现.prop(“ disabled”,true / false)仅适用于输入元素类型(即按钮,复选框等),我试图在锚标记上调用它,但它不起作用。我最终要做的是使用.attr(“ disabled”,true)和.removeAttr(“ disabled”)来切换disable属性,因为它适用于所有html元素。