这不起作用:
$("#elementId").attr("required", "true");
在Chrome和Firefox中,DOM都会生成required
作为属性(无值)或required=""
(空值)。
此示例中的值为“true”并不重要。如果你尝试“asdf”,就会发生同样的事情。
奇怪的是,我相信这个使用工作,因为这个新代码是一个持续了好几年的大型项目的一部分。
我唯一能想到的是,我的Chrome(v10)和Firefox(v4)现在都已经足够先进,他们将required属性识别为HTML5保留关键字。我添加了novalidate属性,认为这可能会关闭任何与表单相关的HTML5。没有这样的运气。
思想?
修改
澄清一下,这只发生在JQuery上。如果我这样说,它就有效:
$("#elementId")[0].setAttribute("required", "true");
JQuery中是否有错误?知道为什么这只发生在JQuery上吗?我们的开发团队喜欢所有代码,尽可能通过JQuery。我可以使用直接的setAttribute JavaScript方法,但宁愿使用有效的JQuery解决方案。
编辑2:
问题的症结在于......
为什么在常规attr()
方法中使用JQuery的setAttribute()
方法不起作用? attr()
方法在某些时候调用setAttribute()
不会降低吗?
这就是令人困惑的事情。如果您使用setAttribute(),Chrome和Firefox可以完美地设置required="true"
。
答案 0 :(得分:19)
您可以使用道具来实现这一目标:
$("#elementId").prop("required", true);
答案 1 :(得分:10)
确实与浏览器有关。我检查了IE8,它将应用你设置的任何字符串值到必需的属性。
由于您不需要任何值(仅必须存在该属性),因此不会影响默认行为。如果你滥用javascript钩子的属性值,那就另外了:)
<input required>
与<input required="">
和<input required="honky-tonk">
由于IE8不支持html5,它就像设置一个虚构属性一样,所以你可以设置$("input").attr("derp", "derty")
并将它分配给元素。
我的猜测是,jquery对那些希望在XHTML严格语法中使用它的人使用required=""
,同时仍然符合HTML5标准。
http://dev.w3.org/html5/spec/Overview.html#the-required-attribute
http://dev.w3.org/html5/spec/Overview.html#boolean-attribute
答案 2 :(得分:7)
我的工作方式是实现以下 良好的旧javascript 代替任何 jQuery :
/bin/sh
或,(显然)
document.getElementById("inputid").required = true;
取决于要求。
The source of my solution is here.
我已经阅读了jQuery API上的.attr()和.prop()页面,并且似乎不支持“required”属性 - 但我愿意更正。
答案 3 :(得分:0)
我经常使用它,但我没有发现任何问题。
$("#elementId").attr("required", "required");
注意:我试过这个但是我无法正常工作:
$("#elementId").attr("required");
即使现在需要的是布尔属性,只需添加属性名称(不带值)似乎与不同浏览器的不同版本不兼容。坚持我上面的原始例子,你应该没事。
答案 4 :(得分:0)
对于所需的输入,如果删除属性而不是将其设置为false
,则效果会更好
$('#elementId').removeAttr('required');
&#13;