我试图基于某些计算并使用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中取出相关部分,并将其放置在小提琴中,请看一看。
发布于 2012-09-12 12:16:52
你们有可用的道具吗?
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-12 12:44:53
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中。如果您在Firebug的HTML选项卡中看到调用后的disabled=""
.prop('disabled', true);
这就是正确的行为,元素是禁用的。尽管禁用了这些值,但还有另一个原因导致这些值仍然被提交。
发布于 2020-06-26 13:07:07
我发现.prop(“禁用”,true/false)只处理输入元素类型(即按钮、复选框等)。我试着在锚标签上叫它,但它不起作用。我最后所做的是使用.attr(“禁用”,true)和.removeAttr(“禁用”)来切换禁用的属性,因为它可以在所有html元素上工作。
https://stackoverflow.com/questions/12387786
复制相似问题