2012-05-04 2 views
2

.attr()の代わりに.prop()を使用してdisabledプロパティを設定することをお勧めしますが、すべて.prop()が機能しないことがわかりました。.prop()とtwitterブートストラップモーダルダイアログ

はさえずりブートストラップモーダルウィンドウ内の例:http://twitter.github.com/bootstrap/javascript.html#modals

を押して「起動デモモーダル」ボタンとコンソールの実行に:その後、

$('#myModal .btn').prop('disabled', true); 

ボタンは無効になりません。しかし、実行した場合:

$('#myModal .btn').attr('disabled', true); 

これらは無効になります。

なぜ起こりますか?

+0

私はこの問題をより簡単に示す例を作成しました。http://jsfiddle.net/jaredhoyt/WNRUj/1/ – jaredhoyt

+0

@jaredhoyt:私は「無効」を押してボタンを無効にし、アンカーを無効にしません。しかし、2番目のリンクには「無効」があります.hm – zerkms

答えて

5

この質問は.prop()と.attr()の間の混乱を強調しています。 .attr()メソッドはHTML要素の属性で直接動作し、.prop()はJavaScript要素のJavaScriptプロパティで動作します。

例えば、$('#myInput').attr('disabled', true)$('#myInput').prop('disabled', true)は同じ効果を持ちますが、実際には2つの全く異なる方法で動作しています。

$('#myInput').attr('disabled', true)は後者の例を追加したがdocument.getElementById('myInput').setAttribute('disabled', 'disabled');

$('#myInput').prop('disabled', true)の同等の要素に「使用禁止」属性を作成するのに影響document.getElementById('myInput').disabled = true;

の同等だろうだろう、それは機能ですブラウザによってネイティブに処理される入力用のプロパティーのdisabledです。

あなたの例の問題は、JavaScriptオブジェクトにネイティブdisabledプロパティがないアンカー要素$('#myModal .btn')を操作しようとしていることです。したがって、.disabled = trueを設定すると、.foo = 'bar'を設定するだけです。ブラウザは、これらの要素の属性をネイティブに追加するつもりはありません。

これは意味があると思います。より明確化が必要な場合は、後で編集します。

+0

今、意味があります – zerkms

関連する問題