1

私の ASP.NET Web アプリケーションには、コード ビハインドで無効にできる要素と、JavaScript で無効にできる要素がいくつかあります。

コード ビハインド要素については、次の VB.NET プロパティを使用するだけです。

Me.element1.Enabled = False

動的要素には、次の JavaScript プロパティを使用します。

document.getElementById('" & Me.element2.ClientID & "').disabled = true;

最初に気付いたのは、Enabled プロパティを変更するdisabled="disabled"と、マークアップが追加されるだけでなく、クラスがbutton(ボタンのスキン クラス名) から に変更されることbutton aspNetDisabledです。これを補うために、次の JavaScript 行を追加します。

document.getElementById('" & Me.element2.ClientID & "').className = 'button aspNetDisabled';

(明らかに、これは、要素を再度有効にする場合、またはそのときに className 属性を維持する必要があることを意味します。必要に応じてbutton/ textbox/etc. を使用するようにする必要があります。ボーナス ポイントについては、これに関する推奨事項があれば、聞いてくれると嬉しいです)

disabled=""ただし、JavaScriptによって生成されるマークアップは のみであるのに対し、ASP.NET Enabled プロパティの変更によって生成されるマークアップは であることにも気付きましたdisabled="disabled"

JavaScript をいじって次のように変更してみました。

document.getElementById('" & Me.element2.ClientID & "').disabled = 'disabled';

ただし、属性がまだ空であるため、これは違いを生むようには見えませんでした。興味深いことにdisabled=true;disabled='disabled';同じように機能するようです-そのうちの1つがより正しいと思います(=true;今のところ固執しています)。

要素の有効化と無効化に関して、サーバー側の ASP.NET と同じ結果を JavaScript で実現するための推奨される最良の方法はありますか?

と...

disabled="disabled"とのレンダリングの違いによってdisabled=""問題が発生する可能性はありますか?

4

2 に答える 2

1

プロパティの値はdisabled重要ではありません。暗黙的に http://www.w3.org/TR/html401/interact/forms.html#h-17.12.1

しかし、いくつかの奇妙なことが起こっています。

var my_elem = document.getElementById('my_elem');
elem.disabled = true;  // disabled
elem.disabled = false;  // enabled
elem.disabled = "false"; // disabled

奇妙なケースは

elem.disabled = ""; // disabled

通常""偽物です(のように"" == falsetrue

フレームワークを使用してこれらのプロパティを設定し、ブラウザ固有の動作をキャッチすることをお勧めします。disabled争いはそれほど多くありませopacityんが、のようなプロパティはすべてのブラウザで同じように機能するわけではありません。

于 2012-08-13T09:58:34.443 に答える
0

disabled 属性は、固定値を持つ必要はありません。以前は値がなくても機能していました (例: <input type=text disabled>) が、これにより検証の問題が発生しました。プロジェクトですでに jquery を使用している場合は、次のようなものを使用できます。

$('#elementname').removeAttr('disabled').removeClass('aspNetDisabled');  // Enable

$('#elementname').attr('disabled').addClass('aspNetDisabled');  // Disable

との違いは問題ではdisabled="disabled"ありdisabled="true"ません。

于 2012-08-13T09:53:54.687 に答える