Как установить 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?

jsFiddle

каково значение атрибута, спросите вы?

проверка 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 58

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)

Я знаю, что это вне вопроса, но, возможно, кто-то найдет это полезным :)

имеет значение не атрибут, а свойства и его значение-логическое.

вы можете установить его с помощью

 document.getElementById("edName").required = true;

попробуйте это..

document.getElementById("edName").required = true;