JQuery 1.6のリリースでは、SOに関する推奨事項は、通常、attr()を使用していた場所でprop()を使用し始めることです。
要素を読み取り専用にするとどうなりますか?
$('.control').prop('readonly', 'readonly');
$('.control').prop('readonly', true);
これらのどちらも、コントロールを読み取り専用にしないようです。要素を読み取り専用にすることはルールの例外ですか?
問題は、プロパティ名で大文字と小文字が区別されることです。試してください:
$('.control').prop('readOnly', true);
これにはなぜjQueryが必要なのか本当にわかりません。これも同様に機能します:
document.getElementsByClassName("control")[0].readOnly = true;
これを試して:
$(".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()は属性のみを取得します。