Kısa versiyon
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) { }
Uzun versiyon
TJ Crowder yansıyan özellikleri göstermeyi başardığında , aşağıdaki sözdiziminin yanlış olduğunu öğrendim :
element.attributes["name"] = value;
element.attributes.name = value;
value = element.attributes.name;
value = element.attributes["name"];
Sen gerekir geçmesi element.getAttributeve element.setAttribute:
element.getAttribute("foo");
element.setAttribute("foo", "test");
Bunun nedeni, özniteliğin aslında özel bir HtmlAttribute nesnesi içermesidir :
element.attributes["foo"];
element.attributes.foo;
Bir öznitelik değerini "true" olarak ayarlayarak , gerektirdiği HtmlAttribute nesnesi yerine yanlışlıkla onu bir String nesnesine ayarlamış olursunuz :
element.attributes["foo"] = "true";
element.setAttribute("foo", "true");
Kavramsal olarak doğru fikir (yazılı bir dilde ifade edilir) şudur:
HtmlAttribute attribute = new HtmlAttribute();
attribute.value = "";
element.attributes["required"] = attribute;
Bu nedenle:
getAttribute(name)
setAttribute(name, value)
var olmak. Değerin içindeki HtmlAttribute nesnesine atanması üzerine çalışma yaparlar.
Bunun üzerine bazı nitelikler yansıtılır . Bu, onlara Javascript'ten daha güzel bir şekilde erişebileceğiniz anlamına gelir:
element.required = true;
if (element.required) {...}
element.required = false;
Yapmak istemediğiniz şey , .attributeskoleksiyonu yanlışlıkla kullanmaktır :
element.attributes.required = true;
if (element.attributes.required) {...}
element.attributes.required = false;
Test Durumları
Bu, bir requiredözniteliğin kullanımı etrafında test edilmesine , öznitelik aracılığıyla döndürülen değerlerin ve yansıtılan özelliğin karşılaştırılmasına yol açtı.
document.getElementById("name").required;
document.getElementById("name").getAttribute("required");
sonuçlarla:
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)
.attributesKoleksiyona doğrudan erişmeye çalışmak yanlış. DOM özelliğini temsil eden nesneyi döndürür:
edName.attributes["required"] => [object Attr]
edName.attributes.required => [object Attr]
Bu, neden .attributesdoğrudan koleksiyonla konuşmamanız gerektiğini açıklıyor . Özniteliklerin değerlerini değil , özniteliklerin kendilerini temsil eden nesneleri değiştiriyorsunuz.
Nasıl gerekli ayarlanır?
requiredBir özelliği belirlemenin doğru yolu nedir ? İki seçeneğiniz vardır: yansıtılan özellik veya özelliği doğru şekilde ayarlayarak:
element.setAttribute("required", "");
edName.required = true;
Kesin olarak konuşursak, başka herhangi bir değer özelliği "ayarlayacaktır". Ancak Booleanözniteliklerin tanımı, yalnızca doğruyu"" belirtmek için boş dizeye ayarlanması gerektiğini belirtir . Aşağıdaki yöntemlerin tümü Boolean niteliğini ayarlamak için çalışır , required
ama onları kullanmayın :
element.setAttribute("required", "required");
element.setAttribute("required", "foo");
element.setAttribute("required", "true");
element.setAttribute("required", "false");
element.setAttribute("required", false);
element.setAttribute("required", 0);
Özelliği doğrudan ayarlamaya çalışmanın yanlış olduğunu zaten öğrendik:
edName.attributes["required"] = true;
edName.attributes["required"] = "";
edName.attributes["required"] = "required";
edName.attributes.required = true;
edName.attributes.required = "";
edName.attributes.required = "required";
Nasıl temizlenir ?
Çalışırken hüner kaldırmakrequired özelliğini yanlışlıkla açmak için kolay olması:
edName.removeAttribute("required");
edName.required = false;
Geçersiz yollarla:
edName.setAttribute("required", null);
edName.setAttribute("required", "");
edName.setAttribute("required", "false");
edName.setAttribute("required", false);
edName.setAttribute("required", 0);
Yansıyan .requiredözelliği kullanırken, onu kapatmak için herhangi bir "falsey" değerini ve açmak için doğru değerleri de kullanabilirsiniz . Ancak netlik için doğru ve yanlışa bağlı kalın.
Nasıl kontrol için required?
.hasAttribute("required")Yöntem aracılığıyla özniteliğin varlığını kontrol edin :
if (edName.hasAttribute("required"))
{
}
Ayrıca Boolean yansıyan .requiredözelliği aracılığıyla da kontrol edebilirsiniz :
if (edName.required)
{
}
required="false", standardı yazmadan önce hiç şablon yazmışlar mı? Koşullu nitelikler genellikle bir acıdır, bu boolean özellik değerine koymak çok daha kolaydır ...