我正在使用jQuery v1.4.4。我有一个非常简单的形式:
<select class="myselect" name="myselect">
<option value="-1" selected="selected">N/Av</option>
<option value="-2">N/Ap</option>
<option value="0">Available</option>
</select>
我想要实现的是将值设置为0
(Available
)并禁用选择。所以我做了以下几点:
$('.myselect').val('0');
$('.myselect').prop('disabled', true);
输出正确:正在选择Available
并禁用选择。但是,当我提交表单时,$_POST['myselect']
的值为-1
。当我只使用...时
$('.myselect').val('0');
... $_POST['myselect']
的价值符合预期0
。
所以我的问题是:有没有办法禁用myselect
并仍然设置值?
答案 0 :(得分:2)
但是,当我提交表单时,
$_POST['myselect']
的值为-1
。...
所以我的问题是:有没有办法禁用myselect并仍然设置值?
这就是代码的作用,但是:
已停用的字段aren't included in form submissions *,因此,如果您从-1
收到$_POST['myselect']
,它来自其他地方 - 浏览器将不会为myselect
发送任何内容完全没有(除非你有另一个name="myselect"
字段你没有显示。)
如果您想要表单中包含的字段,请不要禁用它。遗憾的是,select
元素不支持readonly
,因此您必须删除其他选项或使用脚本来阻止用户选择它们。
另请参阅 Himanshu Tyagi's answer,指出您正在使用不在jQuery v1.4.4中的API调用。
*规范的相关引用:
让控件成为表格所有者所在的所有可提交元素的列表,按树顺序排列。
让表单数据集成为名称 - 值类型元组的列表,最初为空。
- 醇>
循环:对于控件中的每个元素字段,按树顺序运行以下子步骤:
如果满足以下任何条件,则跳过此元素的这些子步骤:
- field元素有一个datalist元素ancestor。
- 字段元素已停用。
- ...
(我的重点)
答案 1 :(得分:1)
.prop
并且您使用的是1.4,请参阅代码中的错误日志
$('.myselect').val('0');
$('.myselect').prop('disabled', true);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<select class="myselect" name="myselect">
<option value="-1" selected="selected">N/Av</option>
<option value="-2">N/Ap</option>
<option value="0">Available</option>
</select>
如果您继续使用jQuery 1.4.4,则需要使用attr
而不是prop
:
$('.myselect').val('0');
$('.myselect').attr('disabled', "disabled");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<select class="myselect" name="myselect">
<option value="-1" selected="selected">N/Av</option>
<option value="-2">N/Ap</option>
<option value="0">Available</option>
</select>
属性与属性
属性和属性之间的区别非常重要 具体情况。在jQuery 1.6之前,有时会使用.attr()方法 在检索某些属性时考虑了属性值, 这可能会导致行为不一致。从jQuery 1.6开始,.prop() 方法提供了一种显式检索属性值的方法 .attr()检索属性。