当在Chrome中用JavaScript删除所需属性时,checkValidity()将生成false

当在Chrome中用JavaScript删除所需属性时,checkValidity()将生成false,javascript,html,forms,Javascript,Html,Forms,除非我遗漏了什么,否则这看起来像是Chrome中的一个bug 这里有三种形式,每种形式有两个无线电元件。当没有必需的属性时,表单上的checkValidity会像预期的那样返回true。当存在必需的属性时,表单上的checkValidity将返回false,这与预期的一样 但是,当使用JavaScript删除所需的属性时,checkValidity返回false。这不是我所期望的。欢迎提供任何解释/解决方法!这在Safari和Firefox中正常工作,但在Chrome中不起作用 console

除非我遗漏了什么,否则这看起来像是Chrome中的一个bug

这里有三种形式,每种形式有两个无线电元件。当没有必需的属性时,表单上的checkValidity会像预期的那样返回true。当存在必需的属性时,表单上的checkValidity将返回false,这与预期的一样

但是,当使用JavaScript删除所需的属性时,checkValidity返回false。这不是我所期望的。欢迎提供任何解释/解决方法!这在Safari和Firefox中正常工作,但在Chrome中不起作用

console.log'Valid form:'+document.getElementById'validForm'。检查有效性; console.log'Invalid form:'+document.getElementById'invalidForm'。检查有效性; //document.getElementById'rad1'。必需=false//这和下面的都不起作用 //document.getElementById'rad2'。必需=false; getElementById'rad1'。删除属性'required'; getElementById'rad2'。删除属性'required'; console.log“应为有效形式:”+document.getElementById“应为有效形式”。检查有效性;
我现在可以肯定地说,这是Chrome中的一个bug——如果所需属性是硬设置的,那么出于有效性目的,它不会被忽略,即使被删除,也不会再出现在该项目的属性列表中。如果它确实是固定在铬51,我们将不会等待太久,它被固定。同时,您可以删除硬设置的required属性,并使用setAttribute函数动态地将其放入

请查看下面的代码进行检查-这是一个下午的工作。默认情况下,所需的属性标记将被删除,因此它是有效的。单击“设置必需”后,它将变为无效。移除它可以正常工作。您可以通过单击“将属性日志打印到控制台”来检查RAD的属性,从而看到它已正确应用

重置Rads清除单选按钮(如果选择)

设置要求 删除所需的 检查是否有效 打印属性 复位雷达 需要函数集{ document.getElementByIdrad1.setAttributerequired; document.getElementByIdrad2.setAttributerequired; //getElementById'shouldbavalidForm'。验证; } 功能要求{ document.getElementByIdrad2.removeAttributerequired; document.getElementByIdrad1.removeAttributerequired; } 函数检查有效{ console.log“应为有效形式:”+document.getElementById“应为有效形式”。检查有效性; console.log'Rad1:'+document.getElementById'Rad1'。检查有效性; console.log'Rad2:'+document.getElementById'Rad2'。检查有效性; log'willValidate:Rad1:'+document.getElementById'Rad1'。willValidate; log'willValidate:Rad2:'+document.getElementById'Rad2'。willValidate; log'validationMessage:Rad1:'+document.getElementById'Rad1'.validationMessage; log'validationMessage:Rad2:'+document.getElementById'Rad2'.validationMessage; } 函数printtr{ console.lograd1属性; var el=document.getElementByIdrad1; 对于var i=0,atts=el.attributes,n=atts.length,arr=[];i我现在可以肯定地说,这是Chrome中的一个bug——如果所需属性是硬设置的,那么出于有效性目的,它不会被忽略,即使被删除,也不会再出现在该项目的属性列表中。如果它确实是固定在铬51,我们将不会等待太久,它被固定。同时,您可以删除硬设置的required属性,并使用setAttribute函数动态地将其放入

请查看下面的代码进行检查-这是一个下午的工作。默认情况下,所需的属性标记将被删除,因此它是有效的。单击“设置必需”后,它将变为无效。移除它可以正常工作。您可以通过单击“将属性日志打印到控制台”来检查RAD的属性,从而看到它已正确应用

重置Rads清除单选按钮(如果选择)

设置要求 删除所需的 检查是否有效 打印属性 复位雷达 需要函数集{ document.getElementByIdrad1.setAttributerequired; document.getElementByIdrad2.setAttributerequired; //getElementById'shouldbavalidForm'。验证; } 功能要求{ document.getElementByIdrad2.removeAttributerequired; document.getElemen tByIdrad1.removeAttributerequired; } 函数检查有效{ console.log“应为有效形式:”+document.getElementById“应为有效形式”。检查有效性; console.log'Rad1:'+document.getElementById'Rad1'。检查有效性; console.log'Rad2:'+document.getElementById'Rad2'。检查有效性; log'willValidate:Rad1:'+document.getElementById'Rad1'。willValidate; log'willValidate:Rad2:'+document.getElementById'Rad2'。willValidate; log'validationMessage:Rad1:'+document.getElementById'Rad1'.validationMessage; log'validationMessage:Rad2:'+document.getElementById'Rad2'.validationMessage; } 函数printtr{ console.lograd1属性; var el=document.getElementByIdrad1; 对于var i=0,atts=el.attributes,n=atts.length,arr=[];i你已经是第一个在Google上搜索checkValidity removeAttribute对我有用的结果了。铬51.0.2674.0有趣。我在49.0.2623.87上,其他一些人在49.xx上验证了同样的结果。无论如何,我们需要支持使用较旧浏览器的用户,所以我想这给我们留下了一些解决办法。除了完全用JS重新呈现输入,还有什么其他想法吗?我已经尝试了与你的代码相同的方法,但是用文本替换单选框,这是意料之中的事情——单选按钮可能有缺陷……你已经是Google上第一个checkValidity removeAttribute的结果,对我来说很有用。铬51.0.2674.0有趣。我在49.0.2623.87上,其他一些人在49.xx上验证了同样的结果。无论如何,我们需要支持使用较旧浏览器的用户,所以我想这给我们留下了一些解决办法。除了完全用JS重新呈现输入之外,还有什么其他想法吗?我尝试了与您的代码相同的方法,但用文本替换单选框,效果与预期一样-单选按钮可能有缺陷。。。。