我试图根据一些计算和使用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 请看看
答案 0 :(得分:5)
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');
你的语法看起来很好。 我猜你的问题很可能是不正确的选择器。
要验证选择器是否包含您期望的元素引用:
// 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属性。如果您在调用
disabled=""
.prop('disabled', true);
然后这是正确的行为,元素被禁用。尽管被禁用,仍有其他原因仍在提交。
答案 2 :(得分:0)
我发现.prop(“ disabled”,true / false)仅适用于输入元素类型(即按钮,复选框等),我试图在锚标记上调用它,但它不起作用。我最终要做的是使用.attr(“ disabled”,true)和.removeAttr(“ disabled”)来切换disable属性,因为它适用于所有html元素。