jQuery .prop('禁用',true)忽略.val(' myval')

时间:2017-02-27 11:26:34

标签: jquery

我正在使用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>

我想要实现的是将值设置为0Available)并禁用选择。所以我做了以下几点:

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

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

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

... $_POST['myselect']的价值符合预期0

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

2 个答案:

答案 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调用。

*规范的相关引用:

  
      
  1. 让控件成为表格所有者所在的所有可提交元素的列表,按树顺序排列。

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

  4.   
  5. 循环:对于控件中的每个元素字段,按树顺序运行以下子步骤:

         

    如果满足以下任何条件,则跳过此元素的这些子步骤

         
        
    • field元素有一个datalist元素ancestor。
    •   
    • 字段元素已停用。
    •   
    • ...
    •   
  6.   

(我的重点)

答案 1 :(得分:1)

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

从1.6开始添加

.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()检索属性。