使用JQuery设置名为“required”的属性和任何值都不起作用

时间:2011-04-25 17:55:58

标签: javascript jquery html

这不起作用:

$("#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"

5 个答案:

答案 0 :(得分:19)

您可以使用道具来实现这一目标:

$("#elementId").prop("required", true);

相应文档:http://jquery.com/upgrade-guide/1.9/#attr-versus-prop-

答案 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

,则效果会更好

&#13;
&#13;
$('#elementId').removeAttr('required');
&#13;
&#13;
&#13;