web-dev-qa-db-ja.com

jquery 1.6 .prop()を使用してコントロールを読み取り専用に設定する

JQuery 1.6のリリースでは、SOに関する推奨事項は、通常、attr()を使用していた場所でprop()を使用し始めることです。

要素を読み取り専用にするとどうなりますか?

$('.control').prop('readonly', 'readonly');
$('.control').prop('readonly', true);

これらのどちらも、コントロールを読み取り専用にしないようです。要素を読み取り専用にすることはルールの例外ですか?

27
ajbeaven

問題は、プロパティ名で大文字と小文字が区別されることです。試してください:

$('.control').prop('readOnly', true);

これにはなぜjQueryが必要なのか本当にわかりません。これも同様に機能します:

document.getElementsByClassName("control")[0].readOnly = true;
46
aroth

これを試して:

$(".control").prop({ readOnly: true });

。attr() はHTMLマークアップのデフォルト値を取得しますが、 。prop() は値を動的に取得/設定します。以下を見てください。

<input id="someInput" readonly="readOnly" />

$(".control").attr("readOnly") // would yield "readOnly"
$(".control").prop("readOnly") // would yield true
$(".control").is(":readOnly")  // would yield true

APIドキュメントはこれを言います:

特定の状況では、属性とプロパティの違いが重要になる場合があります。 jQuery 1.6より前は、一部の属性を取得するときに.attr()メソッドでプロパティ値が考慮されることがあり、これにより一貫性のない動作が発生する可能性がありました。 jQuery 1.6以降、.prop()メソッドはプロパティ値を明示的に取得する方法を提供しますが、.attr()は属性のみを取得します。

10
Code Maverick