仅在Google Chrome浏览器中显示“无效的表单控件”
下面的代码在Safari中运行良好,但在Chrome和Firefox中表单不会提交。 Chrome控制台logging错误An invalid form control with name='' is not focusable
。 有任何想法吗?
请注意,虽然下面的控件没有名称,但它们在提交时应该有名字,由下面的Javascript填充。 这个表单在Safari中工作。
<form method="POST" action="/add/bundle"> <p> <input type="text" name="singular" placeholder="Singular Name" required> <input type="text" name="plural" placeholder="Plural Name" required> </p> <h4>Asset Fields</h4> <div class="template-view" id="template_row" style="display:none"> <input type="text" data-keyname="name" placeholder="Field Name" required> <input type="text" data-keyname="hint" placeholder="Hint"> <select data-keyname="fieldtype" required> <option value="">Field Type...</option> <option value="Email">Email</option> <option value="Password">Password</option> <option value="Text">Text</option> </select> <input type="checkbox" data-keyname="required" value="true"> Required <input type="checkbox" data-keyname="search" value="true"> Searchable <input type="checkbox" data-keyname="readonly" value="true"> ReadOnly <input type="checkbox" data-keyname="autocomplete" value="true"> AutoComplete <input type="radio" data-keyname="label" value="label" name="label"> Label <input type="radio" data-keyname="unique" value="unique" name="unique"> Unique <button class="add" type="button">+</button> <button class="remove" type="button">-</button> </div> <div id="target_list"></div> <p><input type="submit" name="form.submitted" value="Submit" autofocus></p> </form> <script> function addDiv() { var pCount = $('.template-view', '#target_list').length; var pClone = $('#template_row').clone(); $('select, input, textarea', pClone).each(function(idx, el){ $el = $(this); if ((el).type == 'radio'){ $el.attr('value', pCount + '_' + $el.data('keyname')); } else { $el.attr('name', pCount + '_' + $el.data('keyname')); }; }); $('#target_list').append(pClone); pClone.show(); } function removeDiv(elem){ var pCount = $('.template-view', '#target_list').length; if (pCount != 1) { $(elem).closest('.template-view').remove(); } }; $('.add').live('click', function(){ addDiv(); }); $('.remove').live('click', function(){ removeDiv(this); }); $(document).ready(addDiv); </script>
Chrome想要专注于需要的控件,但仍然是空的,以便它可以popup消息“请填写此字段”。 但是,如果控件隐藏在Chrome想要popup消息的时候,那就是在提交表单的时候,Chrome因为隐藏而无法关注控件,因此表单不会提交。
所以,为了解决这个问题,当一个控件被javascript隐藏时,我们也必须从该控件中删除“required”属性。
如果你不关心HTML5validation(也许你是在JS或服务器validation),你可以尝试添加“novalidate”的forms或input元素。
它会显示这个消息,如果你有这样的代码:
<form> <div style="display: none;"> <input name="test" type="text" required/> </div> <input type="submit"/> </form>
解决这个问题将取决于网站应该如何工作
例如,如果你不想要表单提交,除非这个字段是必需的,你应该禁用提交button
所以显示div的js代码也应该启用提交button
你也可以隐藏button(应该被禁用和隐藏,因为如果它被隐藏,但不被禁用,用户可以用其他方式提交表单,例如在任何其他字段按enter
键,但如果button被禁用,这将不会发生
如果你想要提交表单,如果div被隐藏,你应该禁用里面的任何必要的input,并启用input,而你显示div
如果有人需要这样的代码,你应该告诉我你需要什么
尝试使用适当的HTML5控件的标签像数字(整数)
<input type='number' min='0' pattern ='[0-9]*' step='1'/>
为小数或浮动
<input type='number' min='0' step='Any'/>
步骤='任何'没有这个,你不能提交你的表单input任何十进制或浮点数,如3.5或4.6在上述领域。
尝试修复模式,键入HTML5控件来解决这个问题。
我得到这个错误,并确定它实际上是在一个没有隐藏的领域。
在这种情况下,它是一个type="number"
字段,这是必需的。 当这个字段没有input任何值时,错误信息显示在控制台中,表格不被提交。 input一个值,然后将其删除意味着validation错误按预期显示。
我相信这是Chrome中的一个错误:我现在的解决方法是想出一个初始值/默认值。
我有错误:
名称='telefono'的无效表单控件不可对焦。
发生这种情况是因为我没有正确使用所需的字段,单击checkbok时启用和禁用。 解决的办法是在checkbok没有标记的时候删除required
属性,并在checkbox被标记时将其标记为需要。
var telefono = document.getElementById("telefono"); telefono.removeAttribute("required");
我有这个问题,当我有类=“隐藏”的input字段,因为我使用的是button,而不是无线电子弹 – 并通过JS更改“活动”状态..
我只是添加了一个额外的无线电input字段的一部分,我想要的味精出现在同一组:
<input type="radio" id="thenorm" name="ppoption" value="" required style="opacity:0"/>
另外两个活动项目符号是不可见的,这一个是没有的,这触发validation信息,没有控制台错误 – 一点点的黑客,但是这些天不是什么..
我必须这样做来修复这个bug,因为我有一些type="number"
其中min="0.00000001"
:
HTML:
<input type="number" min="0.00000001" step="0.00000001" name="price" value="[%price%]" />
JS:
$('input[type="submit"]').click(function(e) { //prevent chrome bug $("input:hidden").val(null); });
如果我没有将所有隐藏的input字段设置为null
chrome仍然会尝试validationinput。
这个错误得到,如果添加小数格式。 我只是添加
step="0.1"
$("...").attr("required"); and $("...").removeAttr("required");
直到我把我所有的jQuery代码之间:
$(document).ready(function() { //jQuery code goes here });
required
更换required
=“required”
- 当localStorage已满时会发生什么?
- 使用Google Chromedebugging和编辑HTML页面中embedded的JavaScript
- 如何在Visual Studio中debugging时强制Chrome浏览器重新加载.css文件?
- 如何让Chrome浏览器允许混合内容?
- Chrome认为99,999与十万大不相同
- Google Chrome扩展程序中的网页抓取(JavaScript + Chrome API)
- Chrome开发工具:如何跟踪networking的链接,打开一个新的标签?
- 在Chrome中停用相同的原产地策略
- JS的Chrome CPU Profile中“self”和“total”的区别