「読み取り専用」属性を<input>に追加する方法


301

readonly特定に追加するにはどうすればよい<input>ですか?.attr('readonly')動作しません。


2
.attr( 'readonly'、true)は機能し、その他は不可
Qiao

3
.attr( 'readonly'、 'readonly')も機能します
Qiao

3
使用するDOCTYPEによって異なります。HTML 4.01 DTDの場合、CMSからの回答は有効で有効なHTML 4.01です。XHTML DTDを使用している場合、ceejayozからの回答は機能し、有効なXHTMLです。
bjoernwibben 09

2
DOMはdoctypeに依存しません。DOMは、HTMLとXMLのどちらで読み込まれた場合でも同じです。IEとの互換性を保つため、ほとんどの場合、XHTMLは実際にはXMLではなくHTMLとして提供されます。
ボビンス2009

回答:


545

jQuery <1.9

$('#inputId').attr('readonly', true);

jQuery 1.9以降

$('#inputId').prop('readonly', true);

propとattrの違いについてもっと読む


1
本気ですか?私もそう思いましたが、仕様については何も見つかりません。<input name = "foo" readonly = "readonly" value = "bar" />は、xhtml 1.0 strictのvalidator.w3.orgで完全に検証されます。
Jonas Stensved、2011

17
jQueryのAPIで述べたように、このポストは、むしろ.ATTR()より)(.propに変更する必要があります。jquery.com/upgrade-guide/1.9/#attr-versus-prop-
frshca

readonly属性は「ブール属性」です-whatwg.org/specs/web-apps/current-work/#boolean-attribute 誤解を招くような名前ですが、値は「true」または「false」であってはなりません。上記のコードは実際に機能すると思いますが(jQuery 1.8.1を使用してChromeでテスト)、後で経験の浅い人が混乱する可能性があります。また、jQueryドキュメントによると、値はブール値ではなく、数値または文字列である必要があります。api.jquery.com/attr/#attr2
ルーク

151

$ .prop()を使用

$("#descrip").prop("readonly",true);

$("#descrip").prop("readonly",false);

8
.propのjQuery APIを読んだ後、これは受け入れられる答えになるはずです。以前は常に.attr( 'readonly'、 'readonly')と.removeAttr( 'readonly')を実行していましたが、これはより正しいようでコードもきれいになります。
evan w 2012

4
ここで述べられているように、誰もがこの答えを使用する必要があります:jquery.com/upgrade-guide/1.9/#attr-versus-prop-
frshca

4
使用に関する注意$.prop()事項:Propはreadonly属性を空白/空の文字列に設定するため、の属性セレクターを使用するCSSがある場合は、[readonly="readonly"]これをに変更する[readonly](または両方を含める)必要があります。
ルーク、

28

Readonlyはhtmlで定義されている属性であるため、1つの属性として扱います。

編集できないようにするには、操作しているオブジェクトにreadonly = "readonly"のようなものを含める必要があります。そして、再び編集可能にしたい場合は、readonly = ''のようなものはありません(これが正しく理解されていれば、これは標準ではありません)。本当に属性全体を削除する必要があります。

そのため、jqueryを使用して追加および削除することは理にかなっています。

読み取り専用のものを設定します。

$("#someId").attr('readonly', 'readonly');

読み取り専用を削除:

$("#someId").removeAttr('readonly');

これは私にとって本当に効果的な唯一の選択肢でした。それが役に立てば幸い!


20

.attr('readonly', 'readonly')トリックを行う必要があります。あなた.attr('readonly')だけの値を返し、それは1を設定しません。


16
jQueryのattr()は、HTML属性ではなくJavaScriptプロパティで機能します。attr( 'readonly')は、実際にはブール値であるDOMレベル1 HTMLプロパティreadOnlyで動作しているため、「true」がより適切です。ただし、文字列「readonly」も自動的にブール値に変換される場合は真の値なので、上記は引き続き機能します。
ボビンス2009

属性を「true」に設定したくないと思います。.attr値はjQueryのドキュメントによると、文字列または数値ではなく、ブール値でなければなりません:api.jquery.com/attr/#attr2また、HTML「ブール属性は、」唯一の空の文字列または属性の値でなければなりません。解決策は.prop()混乱を避けるために使うことだと思います。
ルーク

16

「無効」にすると、POSTで入力が送信されなくなる


4
はい、そうです。この理由で「無効」の代替を探しているときに、このスレッドを見つけました。
Jonas Stensved、2011

ただし、送信する直前に有効にして、後で無効にすることができます$(document).on( 'submit'、 "#myform"、function(e){//入力を有効にするreturn true; //その後、無効にしてください私はそれをテストしました
Geomorillo

HTMLの読み取り専用の入力値は、非表示を使用せずにPOSTで送信できますか?
Ajay Takur

12

.removeAttrを使用して、読み取り専用を無効にすることができます。

$('#descrip').removeAttr('readonly');

5

読み取り専用を有効にする場合:

$("#descrip").attr("readonly","true");

読み取り専用を無効にするため

$("#descrip").attr("readonly","");

api.jquery.com/attrから"jQuery 1.6以降、.attr()メソッドは、設定されていない属性に対して未定義を返します。フォーム要素のチェック済み、選択済み、または無効状態などのDOMプロパティを取得して変更するには、 .prop()メソッドを使用してください。」
David Clarke

1
この属性は、「true」の文字列に設定しないでください。これは機能する可能性がありますが、技術的には正しくありません。(上記の私の以前のコメントを参照してください。)
ルーク

この提案は使用しないでください。こちらでより良い提案を入手できます。「true」は設定に対して正しくなく、削除も正しくありません。
MiFiHiBye

4

setAttributeプロパティを使用します。例では、select 1がテキストボックスにreadonly属性を適用する場合、それ以外の場合は属性readonlyを削除することに注意してください。

http://jsfiddle.net/baqxz7ym/2/

document.getElementById("box1").onchange = function(){
  if(document.getElementById("box1").value == 1) {
    document.getElementById("codigo").setAttribute("readonly", true);
  } else {
    document.getElementById("codigo").removeAttribute("readonly");
  }
};

<input type="text" name="codigo" id="codigo"/>

<select id="box1">
<option value="0" >0</option>
<option value="1" >1</option>
<option value="2" >2</option>
</select>

-4

jQueryバージョン1.9未満の場合:

$('#inputId').attr('disabled', true);

jQueryバージョン> = 1.9の場合:

$('#inputId').prop('disabled', true);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.