3

我正在尝试根据一些计算并使用 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 并基于我尝试启用选定字段同时禁用其他字段的选择,因为据我所知,禁用字段在提交表单时从未提交到服务器,但在我的情况下它们是提交。

在使用萤火虫检查时,我看到非选定项目的禁用字段值被设置""disable=""

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

编辑

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

4

3 回答 3

8

你有 prop() 可用吗?

prop()jQuery 1.6中添加并使用如下:

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

如果您使用的是jQuery 1.5.x或更低版本,则可以使用attr()常见问题解答 - 如何从 jQuery 站点启用/禁用表单元素:

// 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或更多,则您的选择器是正确的。

于 2012-09-12T12:16:52.907 回答
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 属性。如果您disabled=""在调用后在 Firebug 的 HTML 选项卡中看到

.prop('disabled', true);

那么这是正确的行为,并且该元素禁用。尽管被禁用,但仍然提交值还有另一个原因。

于 2012-09-12T12:44:53.080 回答
1

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

于 2020-06-26T13:07:07.337 回答