2011-10-10 26 views
5

私はいつもdisabledという属性がHTML <input>であり、すべてが私の脳をねじっていると感じています。なぜ否定された属性名を選択するのは、より直感的なenabledではないのですか?属性が「無効」で「有効」でない理由

ちょうど比較:

enabled=advancedUser 
disabled=not(advancedUser) 

enabled=not(locked) 
disabled=locked 

enabled=advancedUser and not(locked) 
disabled=not(advancedUser) or locked 
disabled=not(advancedUser and not(locked)) 
+5

おそらく、しかしW3Cはそれをそのように行い、ここで不平を言うことはそれを変えないでしょう。 – alex

答えて

12

この背後にある根本的な理由は、それがHTML入力フィールドに後で加えた、および既存のWebページとの下位互換性を維持するためにそのようになるために必要なことです。

<input>タグが最初に定義されたとき、その機能は極端に制限されていました。 disabledまたはreadonlyの属性はありませんでした。また、他の多くのプロパティも今日は当たり前です。

これらはすべて後で追加されましたが、追加されるまでに多くのWebサイトですでに<input>フィールドが使用されていたため、無効にする機能は使用していない既存のコードに影響を与えずに機能しなければなりませんでした。したがって、デフォルトの状態はenabledでなければなりませんでした。

また、これはブール値フラグでなければならなかったため、enabled=trueではなくdisabledとなっています。後者はキーと値のペア属性でした。これは良い選択ではありませんでした。

は、次のことを考えてみましょう:

enabled=false 
enabled=0 
enabled=FALSE 
enabled=no 
enabled=disabled 
enabled=flase 
etc... 

ブラウザが可能な値の膨大な数に対処できるようにしなければなりませんでした。それをブーリアンフラグにすることは事を非常に単純化します。 Webサイトの開発者とブラウザの開発者の両方にとって、仕様を理解しやすくしています。

他のことは、このプロパティがHTMLに追加されたときは、いわゆる「ブラウザウォーズ」の途中だったということです。多くの機能が、競合するWebブラウザに追加されていました。急いで、正式な仕様の恩恵を受けませんでした。多くの機能が追加されました。

私はこれがこれらの機能の1つではないと信じています。disabledフラグは、あなたがそれを停止して考えると完全に論理的です。しかし、ブラウザ開発者がもう少し前に協力していれば、より良い設計になった可能性は十分にある。

どんな場合でも、今日の状況は、これが私たちが持っているものです。 HTML仕様は進化しているかもしれませんが、このような既存の機能は今変更されません。

関連する問題