我正面对众所周知的Chrome"#focusable-input"错误,但我的情况不同于我在那里找到的另一篇文章中的解释。
我首先在一个指向良好的输入上重复此错误消息,此输入没有必需的属性: 代码:
<fieldset>
<label>Total (montaje incl.)</label>
<input type="number" id="priceFinal" name="priceFinal"> €
</fieldset>
错误: 名称=&#39; priceFinal&#39;的无效表单控件无法集中精力。
当用户填写表单时,此字段通过带有jquery的js脚本获取其值。用户在另一个输入中键入一个大小,脚本使用大小值进行数学运算,然后将结果放在&#39; priceFinal&#39;使用jquery函数输入:.val()
在浏览器中,我们可以看到输入正确填充,此时没有显示错误。并且通过&#39; novalidate&#39;解决方案一切顺利,所以我认为它不能对不可聚焦的错误负责。
然后我得到了同样的错误,输入没有名字,我没有写,也没有在我的DOM中存在:
名称为&#39;&#39;的无效表单控件无法集中精力。
这很奇怪,因为我的表单中没有名字的唯一输入是类型:提交一个
<input type="submit" class="btn btn-default" value="Ver presupuesto" />
我有一些必填字段,但是我发送表单时总是检查它们是否已填满。我粘贴它以防它可以提供帮助:
<fieldset>
<input type="text" id="clientName" name="clientName" placeholder="Nombre y apellidos" class="cInput" required >
<input type="text" id="client_ID" name="client_ID" required placeholder="CIF / NIF / DNI" class="cInput">
</fieldset>
<fieldset>
<input type="text" id="client_add" name="client_add" placeholder="Dirección de facturación" class="addInput" required >
</fieldset>
<fieldset>
<input type="text" id="client_ph" name="client_ph" placeholder="Teléfono" class="cInput" required>
<input type="email" id="client_mail" name="client_mail" placeholder="Email" class="cInput" required>
</fieldset>
novalidate解决方案清除错误但它没有解决它,我的意思是必须有一种方法来解决它没有黑客。
任何人都知道可能会发生什么? 感谢
答案 0 :(得分:18)
我遇到了同样的问题,并且每个人都指责所需的隐藏输入很差,但看起来像是一个在字段集中包含所需字段的错误。 Chrome会尝试关注(出于某种未知原因)您的字段集而不是您所需的输入。
此错误仅出现在版本43.0.2357.124 m中测试的chrome I中。 并不是在Firefox中发生的。
示例(非常简单)。
<form>
<fieldset name="mybug">
<select required="required" name="hola">
<option value=''>option 1</option>
</select>
<input type="submit" name="submit" value="send" />
</fieldset>
</form>
&#13;
name='mybug'
无效的表单控件无法调焦。
这个bug很难被发现,因为通常字段集没有名称所以name=''
是WTF!但是一块一块地切成薄片,直到找到了小鹦鹉。
如果从字段集中获得所需的输入,则错误消失。
<form>
<select required="required" name="hola">
<option value=''>option 1</option>
</select>
<fieldset name="mybug">
<input type="submit" name="submit" value="send" />
</fieldset>
</form>
&#13;
我会举报,但我不知道Chrome社区的bug在哪里。
答案 1 :(得分:5)
感谢这篇文章,我发现我的问题还在于Chrome尝试关注我的字段集,而不是输入字段。
要从控制台获得更好的响应:
将输入[type =&#34;隐藏&#34;]元素的类型更改为&#39; text&#39;
function cleanInputs(){
var inputs = document.getElementsByTagName( 'input' ),
selects = document.getElementsByTagName( 'select' ),
all = document.getElementsByTagName( '*' );
for( var i=0, x=all.length; i<x; i++ ){
all[i].setAttribute( 'name', i + '_test' );
}
for( var i=0, x=selects.length; i<x; i++ ){
selects[i].style.display = 'block';
}
for( var i=0, x=inputs.length; i<x; i++ ){
if( inputs[i].getAttribute( 'type' ) === 'hidden' ){
inputs[i].setAttribute( 'type', 'text' );
}
inputs[i].style.display = 'block';
}
return true;
}
在控制台中,我运行了cleanInputs(),然后提交了表单。 来自控制台的结果是:
名称为&#39; 28_test&#39;的无效表单控件不可专注。
名称=&#39; 103_test&#39;的无效表单控件不可专注。
然后,切换到Web Developer&#34; Elements&#34;看来,我能够找到&#34; 28_test&#34;和&#34; 103_test&#34; (两个字段集) - 确认我的问题是一个必需的输入字段,嵌套在字段集中。
答案 2 :(得分:1)
我遇到了同样的问题所以我删除了必需的=&#34;必需&#34;来自麻烦的领域。
答案 3 :(得分:1)
如果在执行jQuery函数时出现错误,请尝试将&#34;返回false&#34;关于你的功能,或功能(e){e.preventDefault(); ......}
答案 4 :(得分:0)
在我写这个问题的过程中,我意识到了一件事:剧本赋予&#39; priceFinal&#39;字段有时是十进制数。
在这种情况下,解决方案是为此输入编写step属性:
... step="any" ...
所以这个&#39; nofocusable&#39; bug不仅是一个必需的和隐藏的字段问题,它也是由格式冲突产生的。
答案 5 :(得分:0)
Nach给了我最好的指针......(y)我还有一个输入类型=&#34;数字&#34;步骤=&#34; 0.1&#34;并且控制台在验证时显示此错误:名称为&#39;&#39;的无效表单控件不可专注。
删除步骤=&#34; 0.1&#34;在元素上,现在可以验证表单
答案 6 :(得分:0)
novalidate
作为表单的属性。 e.g
<form action="" novalidate>
....
</form>
答案 7 :(得分:0)
这是解决方案......
<form>
<input type="text" ng-show="displayCondition" ng-required="displayCondition"/>
</form>
许多人没有意识到将false
传递给ng-required
会禁用该指令。