Укороченная версия
element.setAttribute("required", "");
element.required = true;
jQuery(element).attr('required', '');
$("#elementId").attr('required', '');
element.removeAttribute("required");
element.required = false;
jQuery(element).removeAttr('required');
$("#elementId").removeAttr('required');
if (edName.hasAttribute("required")) { }
if (edName.required) { }
Длинная версия
Как только TJ Crowder удалось указать на отраженные свойства , я узнал, что следующий синтаксис неверен :
element.attributes["name"] = value;
element.attributes.name = value;
value = element.attributes.name;
value = element.attributes["name"];
Вы должны пройти element.getAttribute
и element.setAttribute
:
element.getAttribute("foo");
element.setAttribute("foo", "test");
Это потому, что атрибут фактически содержит специальный объект HtmlAttribute :
element.attributes["foo"];
element.attributes.foo;
Устанавливая для атрибута значение "true", вы ошибочно устанавливаете его для объекта String , а не для объекта HtmlAttribute, который ему нужен:
element.attributes["foo"] = "true";
element.setAttribute("foo", "true");
Концептуально правильная идея (выраженная на типизированном языке):
HtmlAttribute attribute = new HtmlAttribute();
attribute.value = "";
element.attributes["required"] = attribute;
Вот почему:
getAttribute(name)
setAttribute(name, value)
существовать. Они выполняют работу по присвоению значения объекту HtmlAttribute внутри.
Вдобавок к этому отражаются некоторые атрибуты . Это означает, что вы можете получить к ним более удобный доступ из Javascript:
element.required = true;
if (element.required) {...}
element.required = false;
Чего вы не хотите делать, так это по ошибке использовать .attributes
коллекцию:
element.attributes.required = true;
if (element.attributes.required) {...}
element.attributes.required = false;
Примеры тестирования
Это привело к тестированию использования 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", "");
edName.required = true;
Строго говоря, любое другое значение будет «устанавливать» атрибут. Но определение Boolean
атрибутов диктует, что ""
для указания истины следует устанавливать только пустую строку . Следующие методы все работы , чтобы установить на required
булевой атрибут,
но не используйте их:
element.setAttribute("required", "required");
element.setAttribute("required", "foo");
element.setAttribute("required", "true");
element.setAttribute("required", "false");
element.setAttribute("required", false);
element.setAttribute("required", 0);
Мы уже узнали, что пытаться установить атрибут напрямую неправильно:
edName.attributes["required"] = true;
edName.attributes["required"] = "";
edName.attributes["required"] = "required";
edName.attributes.required = true;
edName.attributes.required = "";
edName.attributes.required = "required";
Как очистить требуется?
Хитрость при попытке удалить в required
атрибут является то , что это легко случайно включить его:
edName.removeAttribute("required");
edName.required = false;
Недействительными способами:
edName.setAttribute("required", null);
edName.setAttribute("required", "");
edName.setAttribute("required", "false");
edName.setAttribute("required", false);
edName.setAttribute("required", 0);
При использовании отраженного .required
свойства вы также можете использовать любые «ложные» значения, чтобы выключить его, и истинные значения, чтобы включить его. Но для ясности просто придерживайтесь истинного и ложного.
Как проверить для required
?
Проверить наличие атрибута .hasAttribute("required")
методом:
if (edName.hasAttribute("required"))
{
}
Вы также можете проверить это с помощью логического отраженного .required
свойства:
if (edName.required)
{
}
required="false"
, они когда-нибудь писали шаблон до написания стандарта? Условные атрибуты обычно вызывают затруднения, гораздо проще просто поместить это логическое значение в значение атрибута ...