【问题标题】:dynamically change required atributte for html5 input control动态更改 html5 输入控件的所需属性
【发布时间】:2014-09-02 16:34:04
【问题描述】:

我有一个输入控件,它是必填字段。但是,我想使用 javascript 来动态更改所需的属性,以便它可以变为不需要。但是,它不起作用。知道如何使它工作吗?

window.onload = function(){
    document.getElementById("website").setAttribute("required","false");
}

<input id="website" type="url" required>

【问题讨论】:

标签: javascript html


【解决方案1】:

required 是所谓的boolean attribute。它仅存在于元素上表明需要输入。它有什么价值并不重要。

删除如果您想让输入成为可选的属性(所有布尔属性也是如此):

document.getElementById("website").removeAttribute("required");

或者,访问 DOM 属性 并将其设置为 false:

document.getElementById("website").required = false;

您通常应该prefer dealing with properties than with attributes。这也使意图更加清晰。

【讨论】:

  • 我在我的项目中使用 JQuery 并且使用 $('#name').removeAttr('required') 对我不起作用,$('#name').required = false 也不起作用。但是做$('#name')[0].required = false 工作。你能解释一下这种行为吗?
  • 不确定第一个(但我知道 jQuery 过去对 removeAttr 很奇怪)。第二个不起作用,因为 jQuery 对象doesn't have a required property。您只是为 jQuery 对象分配了一个新的任意属性。最后一个有效,因为您正在访问 jQuery 对象“内部”的 DOM 元素,即它与我的第二个建议相同。
  • 好的,如果我想避免使用 [0] 在 jQuery 中指定 DOM 元素,有什么建议吗?我问这个是因为它看起来有点老套的做事方式..
  • 要使用 jQuery 设置 DOM properties,您可以使用 .prop: $('#name').prop('required', false) api.jquery.com/prop/#prop2
  • 感谢这个优雅的方法。
【解决方案2】:

您可能需要使用removeAttribute() 方法。

【讨论】:

    【解决方案3】:

    这个问题类似于另一个涉及“隐藏”属性的问题。为了更广泛的兼容性,请考虑使用属性的 XHTML 形式,而不是 HTML 形式:

     <input id="website" type="url" required="required" />
    

    (和'hidden'的相似之处在于属性被指定为hidden="hidden")

    无论如何,当试图更改 JavaScript 中 hidden 属性的值时,将其设置为“false”是行不通的。但是,将其设置为空字符串可以,因此您可以尝试“必需”:

     document.getElementById("website").required="";
     document.getElementById("website").required="required"; //when required wanted
    

    【讨论】:

    • property 设置为 false 确实有效。在支持required的浏览器中尝试jsfiddle.net/zpLt4rye
    • 那么也许原来提问者的真正问题是“假”(字符串)和假(布尔)之间的区别。当然,字符串实际上并不等于布尔值 false。
    猜你喜欢
    • 2011-04-24
    • 2011-05-12
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 2021-11-19
    • 1970-01-01
    • 2021-10-31
    相关资源
    最近更新 更多