Vraag checked = "checked" vs checked = true


Wat is het verschil tussen de onderstaande twee gebruiksmogelijkheden?

document.getElementById('myRadio').checked = "checked";

en

document.getElementById('myRadio').checked = true;

Voor mij gedragen beiden zich op dezelfde manier. Maar ik ben gewoon nieuwsgierig om te weten waarom er twee methoden bestaan ​​om hetzelfde te doen.

Welke is het ideale gebruik? Ik moet IE7 en hogere versies ondersteunen.


31
2018-05-18 09:41


oorsprong


antwoorden:


document.getElementById('myRadio').checked is een Booleaanse waarde. Het zou moeten zijn true of false

document.getElementById('myRadio').checked = "checked"; werpt de string naar een boolean, wat waar is.

document.getElementById('myRadio').checked = true; gewoon toewijzen true zonder te gieten.

Gebruik true omdat het marginaal efficiënter is en meer intentie onthult aan beheerders.


43
2018-05-18 09:46



Het origineel checked attribuut (HTML 4 en ervoor) had geen waarde nodig - als het al bestond, was het element "gecontroleerd", zo niet, dan was het dat niet.

Dit is echter niet geldig voor XHTML die HTML 4 volgde.

De standaard voorgesteld om te gebruiken checked="checked" als een voorwaarde voor waar - dus beide manieren waarop je gepost bent, eindigen hetzelfde.

Het maakt echt niet uit welke je gebruikt - gebruik degene die het meest logisch voor je is en houd je eraan (of ga akkoord met je team op welke weg).


7
2018-05-18 09:43



document.getElementById('myRadio') geeft je het DOM-element terug, ik zal ernaar verwijzen elem in dit antwoord.

elem.checked toegang tot de eigendom genaamd checked van het DOM-element. Deze eigenschap is altijd een boolean.

Bij het schrijven van HTML die u gebruikt checked="checked" in XHTML; in HTML kunt u eenvoudig gebruiken checked. Bij het instellen van het attribuut (dit gebeurt via .setAttribute('checked', 'checked')) moet u een waarde opgeven, omdat sommige browsers een lege waarde als niet-bestaand beschouwen.

Aangezien u het DOM-element hebt, hebt u echter geen reden om het kenmerk in te stellen, omdat u daarvoor eenvoudig de - veel comfortabelere - boolean-eigenschap kunt gebruiken. Aangezien niet-lege tekenreeksen worden overwogen true in een Booleaanse context, instellen elem.checked naar 'checked' of iets anders dat geen valse waarde is (zelfs 'false' of '0') vinkt het selectievakje aan. Er is geen reden om het niet te gebruiken true en false al moet je dus bij de juiste waarden blijven.


6
2018-05-18 09:46



Het element heeft zowel een attribuut als een eigenschap met de naam checked. De eigenschap bepaalt de huidige status.

Het kenmerk is een tekenreeks en de eigenschap is een boolean. Wanneer het element wordt gemaakt op basis van de HTML-code, wordt het kenmerk ingesteld met de opmaak en wordt de eigenschap ingesteld op basis van de waarde van het kenmerk.

Als er geen waarde voor het attribuut in de markup is, wordt het attribuut null, maar het eigendom is ook altijd true of false, zo wordt het false.

Wanneer u de eigenschap instelt, moet u een Booleaanse waarde gebruiken:

document.getElementById('myRadio').checked = true;

Als u het kenmerk instelt, gebruikt u een tekenreeks:

document.getElementById('myRadio').setAttribute('checked', 'checked');

Merk op dat het instellen van het attribuut ook de eigenschap verandert, maar het instellen van de eigenschap verandert het attribuut niet.

Merk ook op dat, ongeacht de waarde waarmee u het attribuut instelt, de eigenschap wordt true. Zelfs als u een lege tekenreeks of gebruikt null, het attribuut instellen betekent dat het is aangevinkt. Gebruik removeAttribute om het element uit te schakelen met behulp van het attribuut:

document.getElementById('myRadio').removeAttribute('checked');

5
2018-05-18 09:52



checked attribuut is dus een Booleaanse waarde "checked"waarde van andere "string" behalve Boolean false converteert naar true.

Elke tekenreekswaarde is waar. Ook de aanwezigheid van attribuut maakt het waar:

<input type="checkbox" checked>

Je kunt het alleen laten veranderen door Boolean te veranderen in DOM met JS.

Dus het antwoord is: ze zijn gelijk.

w3c


2
2018-05-18 09:44