Как установить HTML5 обязательный атрибут в Javascript?
я пытаюсь отметить a text поле ввода как требуются в Javascript.
<input id="edName" type="text" id="name">
если поле изначально обозначены как required:
<form>
<input id="edName" type="text" id="name" required><br>
<input type="submit" value="Search">
</form>
когда пользователь пытается отправить им выдается ошибка проверки:
но теперь я хочу установить на "runtime", через Javascript:
<form>
<input id="edName" type="text" id="name"><br>
<input type="submit" value="Search">
</form>
С соответствующим сценарий:
//recommended W3C HTML5 syntax for boolean attributes
document.getElementById("edName").attributes["required"] = "";
за исключением того, когда я отправляю сейчас, нет проверки проверки, нет блока.
что такое правильно способ установки логический атрибут проверки HTML5?
каково значение атрибута, спросите вы?
проверка HTML5 документирована как Boolean:
4.10.7.3.4 в
requiredатрибутThe
requiredэто логический атрибут. Если этот элемент указан, он является обязательным.
есть много заламывания рук о том, как определить . Спецификация HTML5 отмечает:
наличие логического атрибута в элементе представляет истинное значение, а отсутствие атрибута представляет ложное значение.
если атрибут присутствует, его значение должно быть либо пустой строкой, либо значением, которое не зависит от регистра ASCII для канонического имени атрибута, без начальных или конечных пробелов.
это означает, что вы можете указать requiredboolean атрибут двумя разными способами:
edName.attributes.required = ""; //the empty string
edName.attributes.required = "required"; //the attribute's canonical name
но каково значение атрибута действительно?
когда вы смотрите на мой jsFiddle этого проблема, вы заметите, что если required атрибут определяется в разметке:
<input id="edName" type="text" id="name" required>
тогда значение атрибута не пустая строка, ни каноническое имя атрибута:
edName.attributes.required = [object Attr]
это может привести к решению.
5 ответов:
requiredэто отражено собственность (типаid,name,typeи такие), так:element.required = true;...где
elementфактическийinputэлемент DOM, например:document.getElementById("edName").required = true;
(просто для полноты картины.)
Re:
тогда значение атрибута не является ни пустой строкой, ни каноническим именем атрибута:
edName.attributes.required = [object Attr]вот так
requiredв этом коде-это объект, а не строку;attributesэтоNamedNodeMapчьи значенияAttrобъекты. Чтобы получить значение одного из них, вы бы посмотрели на егоvalueсобственность. Но для логического атрибута значение не имеет значения; атрибут либо присутствует в карте (true), либо нет (false).если
requiredне отраженный, вы бы установить его, добавив атрибут:element.setAttribute("required", "");...какой эквивалент
element.required = true. Вы бы очистить его, удалив его полностью:element.removeAttribute("required");...что является эквивалентом
element.required = false.но мы не должны делать, что с
required, так как это отражается.
короткая версия
element.setAttribute("required", ""); //turns required on element.required = true; //turns required on through reflected attribute jQuery(element).attr('required', ''); //turns required on $("#elementId").attr('required', ''); //turns required on element.removeAttribute("required"); //turns required off element.required = false; //turns required off through reflected attribute jQuery(element).removeAttr('required'); //turns required off $("#elementId").removeAttr('required'); //turns required off if (edName.hasAttribute("required") { } //check if required if (edName.required) { } //check if required using reflected attributeТекст
однажды Ти Джей Краудеру удалось указать отражены свойства, я узнал, что следующий синтаксис неправильно:
element.attributes["name"] = value; //bad! Overwrites the HtmlAttribute object element.attributes.name = value; //bad! Overwrites the HtmlAttribute object value = element.attributes.name; //bad! Returns the HtmlAttribute object, not its value value = element.attributes["name"]; //bad! Returns the HtmlAttribute object, not its valueвы должны пройти
element.getAttributeиelement.setAttribute:element.getAttribute("foo"); //correct element.setAttribute("foo", "test"); //correctэто потому, что атрибут на самом деле содержит специальный HtmlAttribute. Они выполняют работу по присвоению значения объекту HtmlAttribute внутри.
кроме того, некоторые атрибуты отражение. Это означает, что вы можете получить доступ к ним более красиво из Javascript:
//Set the required attribute //element.setAttribute("required", ""); element.required = true; //Check the attribute //if (element.getAttribute("required")) {...} if (element.required) {...} //Remove the required attribute //element.removeAttribute("required"); element.required = false;что ты не хотите сделать это по ошибке использовать
.attributesколлекция:element.attributes.required = true; //WRONG! if (element.attributes.required) {...} //WRONG! element.attributes.required = false; //WRONG!Случаях Испытания
это привело к тестированию по использованию
requiredатрибут, сравнивая значения, возвращаемые через атрибут, и отраженные собственностьdocument.getElementById("name").required; document.getElementById("name").getAttribute("required");результаты:
HTML .required .getAttribute("required") ========================== =============== ========================= <input> false (Boolean) null (Object) <input required> true (Boolean) "" (String) <input required=""> true (Boolean) "" (String) <input required="required"> true (Boolean) "required" (String) <input required="true"> true (Boolean) "true" (String) <input required="false"> true (Boolean) "false" (String) <input required="0"> true (Boolean) "0" (String)пытается получить доступ к
.attributesколлекция напрямую-это неправильно. Он возвращает объект, представляющий атрибут DOM:edName.attributes["required"] => [object Attr] edName.attributes.required => [object Attr]это объясняет, почему вы никогда не должны говорить
.attributesсобирать напрямую. Ты не манипулируешь значения атрибутов, но объектов, которые представляют сами атрибуты.как настроить требуется?
Как правильно установить
requiredпо атрибуту? У вас есть два варианта, либо отраженный свойства, или через правильную установку атрибута:element.setAttribute("required", ""); //Correct edName.required = true; //Correctстрого говоря, любое другое значение будет "набор" атрибутов. Но определение
Booleanатрибуты диктуют, что он должен быть установлен только в пустую строку""указать правда. Следующие методы все работают на set вrequiredBoolean,но не используйте них:
element.setAttribute("required", "required"); //valid, but not preferred element.setAttribute("required", "foo"); //works, but silly element.setAttribute("required", "true"); //Works, but don't do it, because: element.setAttribute("required", "false"); //also sets required boolean to true element.setAttribute("required", false); //also sets required boolean to true element.setAttribute("required", 0); //also sets required boolean to trueмы уже узнали, что попытка установить атрибут напрямую неверна:
edName.attributes["required"] = true; //wrong edName.attributes["required"] = ""; //wrong edName.attributes["required"] = "required"; //wrong edName.attributes.required = true; //wrong edName.attributes.required = ""; //wrong edName.attributes.required = "required"; //wrongкак ясный требуются?
трюк при попытке удалить the
requiredатрибут заключается в том, что его легко случайно включить:edName.removeAttribute("required"); //Correct edName.required = false; //CorrectС поврежденных способы:
edName.setAttribute("required", null); //WRONG! Actually turns required on! edName.setAttribute("required", ""); //WRONG! Actually turns required on! edName.setAttribute("required", "false"); //WRONG! Actually turns required on! edName.setAttribute("required", false); //WRONG! Actually turns required on! edName.setAttribute("required", 0); //WRONG! Actually turns required on!при использовании отраженного
.requiredсобственность, вы также можете использовать любой "falsey" значения, чтобы отключить его, и истинные значения, чтобы включить его. Но просто придерживайтесь истинного и ложного для ясности.как Регистрация на
required?проверьте наличие атрибута через
.hasAttribute("required")способ:if (edName.hasAttribute("required") { }вы также можете проверить его с помощью Boolean отражение
.requiredсвойство:if (edName.required) { }
и версия jquery:
$('input').attr('required', true) $('input').attr('required', false)Я знаю, что это вне вопроса, но, возможно, кто-то найдет это полезным :)