2017-02-27 21 views
-1

我正在使用jQuery v1.4.4。我有一个非常简单的形式:jQuery .prop('disabled',true)忽略.val('myval')

<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> 

我想达到的值设置为0Available)和禁用选择什么。所以,我做到以下几点:

$('.myselect').val('0'); 
$('.myselect').prop('disabled', true); 

输出是正确的:Available被选择和选择被禁用。但是,在提交表格时,$_POST['myselect']的值为-1。当我只用...

$('.myselect').val('0'); 

...的$_POST['myselect']0预期。

所以我的问题:有没有办法可以禁用myselect并仍然设置值?

+1

你缺少''',但也许这不是问题。当你写这个问题时可能是一个错字? – Ionut

+1

感谢您指出这一点,写这个问题确实是一个错字。 –

+0

好的。然而,这种行为与你所做的不符。如果该元素被禁用,则其值不会以POST形式发送。你确定你只有一个控制这个名字? –

回答

2

但是,在提交表格时,$_POST['myselect']的值为-1

...

所以我的问题:有没有办法来禁用myselect,仍然设置的值?

这就是该代码会做,但:

残疾人领域aren't included in form submissions *,所以如果你正从$_POST['myselect']-1,它是从别的地方  —浏览器未来将不会发送任何东西myselect(除非你有另一个name="myselect"字段,你没有显示)。

如果您希望表单中包含该字段,请不要将其禁用。不幸的是,select元素不支持readonly,因此您必须删除其他选项或使用脚本来阻止用户选择它们。

另请参阅Himanshu Tyagi's answer指出您使用的API调用不在jQuery v1.4.4中。从规格


*相关报价:

  1. 让控制是所有submittable元素,其形式所有者是形式,树顺序表。

  2. 让表单数据集成为名称 - 值 - 类型元组列表,最初为空。

  3. 循环:对于控制每​​个元件领域,按照树顺序,运行下面的子步骤:

    如果下列任一条件满足,则跳过这些子步骤对于此元素

    • 该字段元素具有一个datalist元素祖先。
    • 该字段元素被禁用。
    • ...

(我的重点)

+1

感谢您指出表单提交中未包含禁用的字段。由于select标签不支持'readonly',我在这个问题中找到了我的答案:[HTML form readonly SELECT tag/input](http://stackoverflow.com/questions/368813/html-form-readonly-select-标签输入)。 –

1

http://api.jquery.com/prop/

.prop因为1.6加入并使用的是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()检索属性。

相关问题