属性动态更改而不是设置值

时间:2013-02-06 18:42:47

标签: javascript jquery html

所以我想要做的就是将文本输入的disabled和readonly属性分别设置为“disabled”和“readonly”。我正在使用Jquery 1.7.1版。我尝试了以下方法:

$("#testtext").attr('disabled','disabled');
$("#testtext").attr("readonly","readonly");
$("#testtext").attr('disabled',true);
$("#testtext").attr("readonly",true);
$("#testtext").prop('disabled',true);
$("#testtext").prop("readonly",true);

生成的标记如下所示:

<input type = "text" id = "testtext" disabled />

正如您所看到的那样,它正在添加disabled属性但不为其赋值。这适用于某些设备,但不是我试图支持的所有设备。这似乎是jQuery应该做的事情,但我的谷歌搜索在这方面没有提出太多。有没有人有任何建议或意见?非常感谢任何建议!

3 个答案:

答案 0 :(得分:4)

$("#testtext").prop("disabled", true);
$("#testtext").prop("readonly", true);

无处不在,因为它们是布尔标志:它们的存在表明该标志处于打开状态(该元素被禁用/只读),无论该属性是否具有值(或者甚至标记中的值是⇨{{1也被禁用了。)

答案 1 :(得分:2)

.prop( propertyName ) // propertyName要获取的属性的名称。

.attr( attributeName ) // attributeName要获取的属性的名称。

根据规范:

  

从jQuery 1.6开始,.attr()方法为属性返回undefined   尚未设定。另外,不应该使用.attr()   普通对象,数组,窗口或文档。要检索和   更改DOM属性,使用.prop()方法。

     

.prop()方法仅获取第一个元素的属性值   在匹配的集合中。它为属性的值返回undefined   尚未设置,或匹配的集合没有元素。要得到   单独使用每个元素的值,使用循环结构   作为jQuery的.each()或.map()方法。

     

属性和属性之间的区别非常重要   具体情况。在jQuery 1.6之前,有时会使用.attr()方法   在检索某些属性时考虑了属性值,   这可能会导致行为不一致。从jQuery 1.6开始,.prop()   方法提供了一种显式检索属性值的方法   .attr()检索属性。

答案 2 :(得分:1)

使用.prop()。对于布尔属性,它比.attr()

更合适/可靠
  

属性通常会影响DOM元素的动态状态   更改序列化的HTML属性。例子包括价值   输入元素的属性,输入的禁用属性和   按钮,或复选框的选中属性。 .prop()方法    应该用于设置disabled和checked而不是.attr()    的方法

(来自.prop()的jquery文档)