2011-10-10 18 views
5

Mi sento sempre l'attributo disabled per HTML <input> e tutto mi sta contorcendo il cervello. Perché scegliere un nome di attributo negato, non è enabled più intuitivo?Perché attributo "disabilitato" ma non "abilitato"

Basta confrontare:

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

Forse, ma il W3C ha fatto così, e lamentarsi qui non lo cambierà. – alex

risposta

12

La ragione fondamentale di questo è che si trattava di una successiva aggiunta ai campi di input HTML, e aveva bisogno di essere in questo modo per mantenere la compatibilità con le pagine web esistenti.

Quando il tag <input> è stato originariamente definito, la sua funzionalità era estremamente limitata. Non disponeva degli attributi disabled o readonly, né di molte altre proprietà che oggi diamo per scontate.

Questi sono stati aggiunti in seguito, ma quando sono stati aggiunti, molti siti Web utilizzavano già i campi <input>, quindi la possibilità di disattivarlo ha dovuto funzionare senza influire sul codice esistente che non lo utilizzava. Pertanto lo stato predefinito doveva essere enabled.

Doveva anche essere una bandiera booleana, motivo per cui è disabled anziché enabled=true. Quest'ultimo sarebbe stato un attributo di coppie valore-chiave. Questa non sarebbe stata una buona scelta.

Si consideri il seguente:

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

Il browser avrebbe dovuto essere in grado di far fronte a un numero enorme di possibili valori. Farne una bandiera booleana semplifica enormemente le cose. Rende le specifiche più facili da capire, sia per lo sviluppatore del sito web che per lo sviluppatore del browser.

L'altra cosa da tenere a mente è che il tempo in cui questa proprietà è stata aggiunta all'HTML era nel mezzo delle cosiddette "guerre del browser". Molte funzionalità sono state aggiunte ai browser Web concorrenti, in tutta fretta e senza il vantaggio di specifiche formali, e sono state aggiunte molte funzionalità che possiamo davvero guardare indietro e vorrei che fosse leggermente diversa.

Non credo che questa sia una di quelle caratteristiche: la bandiera disabled è perfettamente logica se ci si ferma e ci si pensa. Ma è abbastanza probabile che potrebbe essere stato progettato meglio se gli sviluppatori del browser avessero collaborato un po 'più indietro allora.

In ogni caso, la situazione attuale è che questo è ciò che abbiamo. Le specifiche HTML potrebbero essere in evoluzione, ma le funzionalità esistenti come questa non cambieranno ora.

Problemi correlati