Коротка версія
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", чи писали вони коли-небудь шаблон до написання стандарту? Умовні атрибути - це, як правило, біль, набагато простіше просто ввести це логічне значення у значення атрибута ...