name='' 的无效窗体控件不可聚焦

An invalid form control with name='' is not focusable

提问人:mp1990 提问时间:3/3/2014 最后编辑:mp1990 更新时间:3/10/2023 访问量:900368

问:

在 Google Chrome 中,某些客户无法进入我的付款页面。 尝试提交表单时,出现以下错误:

name='' 的无效窗体控件不可聚焦。

这是来自 JavaScript 控制台。

我读到问题可能是由于具有必需属性的隐藏字段造成的。 现在的问题是,我们使用的是 .net webforms 必填字段验证器,而不是 html5 required 属性。

谁得到这个错误似乎是随机的。 有没有人知道这个问题的解决方案?

HTML 验证

评论

17赞 dkasipovic 3/3/2014
如果您认为这可能是由于隐藏的必填字段造成的,也许您应该检查这些字段在某些情况下是否为空?例如,如果您填写会话中的user_id或类似内容,在某些情况下,它可能会保持空白?
2赞 The Vanilla Thrilla 3/3/2014
同意。在 Google Chrome 中打开开发人员控制台 (F12) 并检查字段的值,以查看这些字段的值是否为空。
0赞 mp1990 3/3/2014
谢谢你的评论。不过,这对我来说没有任何意义?我有一个简单的 asp.net 窗体,它使用 asp.net 窗体控件。输入控件由框架生成。
0赞 mp1990 3/3/2014
我检查了一下,输入字段中有值。我有一个隐藏的输入字段,它也有一个值。
7赞 TexWiller 12/7/2019
我认为当字段是必需的但在一般情况下不“可见”时,就会发生这种情况。它发生在我身上,在一个拆分为几个选项卡的表单中,触发错误的字段位于提交时未处于活动状态的选项卡中,我从字段中删除了必需的属性并进行了特定的验证

答:

426赞 user2909164 3/3/2014 #1

向表单添加属性会有所帮助:novalidate

<form name="myform" novalidate>

评论

3赞 mp1990 3/3/2014
谢谢你的评论。但我想知道这会带来什么安全风险?如果有的话?或者它只是告诉浏览器不要验证表单中的输入字段?
59赞 Jukka K. Korpela 3/3/2014
这不是安全风险。(依赖客户端检查是。这是一个可用性问题。
34赞 Jeff Tian 8/27/2014
我尝试过,发现“novalidate”确实是必需的。仅添加表单名称不起作用。
15赞 steel 11/18/2014
添加 novalidate 也会停止客户端验证,例如使用 Rails Simple Form gem。根据 Ankit 的回答 + David Brunow 的评论,最好使问题字段不是必需的。
9赞 oscargilfc 6/10/2015
我发现“具有 name='' 的无效表单控件不可聚焦”还显示输入是否在<fieldset>
43赞 Horatio Alderaan 3/31/2014 #2

如果其他人有这个问题,我也会遇到同样的事情。正如评论中所讨论的,这是由于浏览器试图验证隐藏字段。它在表单中查找空字段并试图专注于它们,但由于它们被设置为 ,它不能。因此错误。display:none;

我能够使用类似的东西来解决它:

$("body").on("submit", ".myForm", function(evt) {

    // Disable things that we don't want to validate.
    $(["input:hidden, textarea:hidden, select:hidden"]).attr("disabled", true);

    // If HTML5 Validation is available let it run. Otherwise prevent default.
    if (this.el.checkValidity && !this.el.checkValidity()) {
        // Re-enable things that we previously disabled.
        $(["input:hidden, textarea:hidden, select:hidden"]).attr("disabled", false);
        return true;
    }
    evt.preventDefault();

    // Re-enable things that we previously disabled.
    $(["input:hidden, textarea:hidden, select:hidden"]).attr("disabled", false);

    // Whatever other form processing stuff goes here.
});

此外,这可能是仅在 Google Chrome 中“无效表单控件”的重复项

评论

8赞 Horatio Alderaan 6/2/2014
如果您倾向于投票否决此答案,请发表评论让我知道原因。如果答案包含不良信息,我宁愿删除它,也不愿将其留在这里并误导社区。
2赞 Jonathan DeMarks 10/27/2014
我不会投反对票,但觉得这段代码使用了一种蛮力的“掩盖问题”方法。在处理遗留代码时,它当然很有用,但对于较新的项目,我建议更努力地研究你的问题。这个答案也适用于在表单标签上使用“novalidate”,但这更明显一些。+1 表示禁用,而不是删除必需。
1赞 Horatio Alderaan 11/12/2014
为了提供一些上下文,当我遇到这个问题时,我正处于“处理遗留代码”的境地。我完全同意这是一个黑客。最好设计标记,这样您就不会遇到这种情况。但是,对于遗留的代码库和不灵活的 CMS 系统,这并不总是可行的。上面禁用而不是使用“novalidate”的方法是我能想到的解决问题的最好方法。
3赞 Druckles 6/5/2015
我同意禁用隐藏字段的方法。删除其“必需”属性将丢失该信息,以防稍后再次显示。然而,重新启用它们将保持这一点。
1赞 lewsid 8/17/2017
我喜欢这个解决方案,并认为当您有一个表单时,它的输入会根据其他输入的选定值可变地显示或隐藏,因此效果很好。这将保留所需的设置,并且仍允许提交表单。更好的是,如果验证失败并且用户执行了完全不同的操作,则无需进行其他重置。
332赞 Ankit Sharma 4/22/2014 #3

在您的 中,您可能隐藏了 having 属性:forminputrequired

  • <input type="hidden" required />
  • <input type="file" required style="display: none;"/>

不能专注于这些元素,你必须从所有隐藏的输入中删除,或者如果你真的需要一个隐藏的输入,你必须在javascript中实现一个验证函数来处理它们。formrequired

评论

9赞 David Brunow 5/30/2014
我注意到,将“电子邮件”类型的字段设置为不显示任何字段也会发生这种情况,这是由 Chrome 尝试验证格式引起的问题。
3赞 Pacerier 1/27/2015
它不需要有 . 单独会导致这个问题。requiredpattern
8赞 Josh Mc 2/9/2015
就我而言,表单字段不是 type=“hidden”,它们只是在视图之外,例如在带有选项卡的表单中。
0赞 Pere 5/13/2015
我有两个表单,一个同时带有一个,另一个带有 ,唯一在 Chrome 中显示错误的是 ,而提交的那个提交良好。<input type="hidden" required /><input type="text" style="display: none" required />display: none"hidden"
0赞 superluminary 6/8/2015
这是正确的答案。Chrome 正在尝试验证 CSS 中隐藏的字段。阻止它显示其验证警告消息,并提醒您此事实。
4赞 Robert 9/28/2014 #4

如果您有如下代码,它将显示该消息:

<form>
  <div style="display: none;">
    <input name="test" type="text" required/>
  </div>

  <input type="submit"/>
</form>

评论

0赞 Robert 6/28/2015
我知道这是一样的,我只是举个例子,有些人他们用代码更好地理解事物:D
0赞 Dennis Kiprotich 3/14/2022
我也有同样的错误,它给了我一段艰难的时光。调试此类错误时应注意细节<input type="name" name="name">
0赞 Robert 3/16/2022
@DennisKiprotich你的意思是没有必需的,但仍然给你这个错误?
0赞 Dennis Kiprotich 3/18/2022
是的,没有它
3赞 utkarshk 11/21/2014 #5

您可以尝试在窗口加载时隐藏的那些元素。因为很有可能由于 JavaScript(选项卡式表单)而将相关元素标记为隐藏.removeAttribute("required")

例如:

if(document.getElementById('hidden_field_choice_selector_parent_element'.value==true){
    document.getElementById('hidden_field').removeAttribute("required");        
}

这应该可以完成任务。

它对我有用......干杯

1123赞 Igwe Kalu 2/5/2015 #6

如果表单字段验证失败,则会出现此问题,但由于相应的无效控件无法聚焦,浏览器尝试在其旁边显示消息“请填写此字段”也会失败。

由于多种原因,在触发验证时,窗体控件可能无法聚焦。下面描述的两种情况是最突出的原因:

  • 根据业务逻辑的当前上下文,该字段是无关紧要的。在这种情况下,应禁用相应的控件或从 DOM 中删除,或者此时不使用该属性进行标记。required

  • 由于用户在输入上按 ENTER 键,可能会发生过早验证。或者用户单击窗体中的按钮/输入控件,但该控件未正确定义控件的 type 属性。如果按钮的 type 属性未设置为 button,则每次点击按钮时,Chrome(或任何其他浏览器)都会执行验证,因为 submit 是按钮类型属性的默认值。

要解决此问题,如果您的页面上有一个按钮,除了提交重置之外,还执行其他操作,请始终记住执行以下操作:.<button type="button">

评论

2赞 graste 5/7/2015
当使用不支持客户端验证或不阻止表单提交的浏览器构建和测试页面时,可能会出现此问题(请参阅 Safari)。下一个使用浏览器的开发人员或用户实际上阻止了表单提交客户端错误(参见 Chrome;甚至在隐藏的表单元素上)遇到了无法访问表单的问题,因为无法提交表单并且不会从浏览器或站点收到任何消息。通过“novalidate”完全阻止验证不是正确的答案,因为客户端验证应该支持用户输入。更改网站是解决方案。
11赞 fatCop 5/31/2015
感谢您的详细回答。省略或添加从来都不是一个好的解决方法。requirednovalidate
2赞 kheit 9/27/2016
这应该是正确的答案。如果您使用的是 html5 客户端验证,则添加 novalidate 可以修复一个问题,同时创建另一个问题。更糟糕的是,Chrome 想要验证未显示的输入(因此不应该是必需的)。
5赞 James Scott 10/6/2016
在我的情况下,只是留下一个示例,有一个隐藏字段,其中默认值不能被步长均匀整除。更改步长解决了这个问题。number
5赞 john 4/14/2017
@IgweKalu好电话。我遇到了在文本区域字段上实现 TinyMCE 的情况。TinyMCE 隐藏原始表单字段(为“必填”)并触发此错误。解决方案,从表单中删除现在隐藏的“必需”属性,并依靠其他方法来确保填写它。
10赞 piotr_cz 6/16/2015 #7

对我来说,当有一个带有值为 '' 的预选选项的字段时,就会发生这种情况:<select>

<select name="foo" required="required">
    <option value="" selected="selected">Select something</option>
    <option value="bar">Bar</option>
    <option value="baz">Baz</option>
</select>

不幸的是,它是占位符的唯一跨浏览器解决方案(如何为“选择”框制作占位符?

该问题出现在 Chrome 43.0.2357.124 上。

17赞 Pere 7/3/2015 #8

之前的答案都不适合我,而且我没有任何带有该属性的隐藏字段。required

就我而言,问题是由于先将 a 和 a 作为其第一个子项引起的,该子项具有 with 属性。删除解决了问题。或者你可以用它包装你的表单;这是 HTML5 允许的。<form><fieldset><input>required<fieldset>

我在 Windows 7 x64,Chrome 版本 43.0.2357.130 m 上。

评论

0赞 Ben 7/23/2015
有同样的问题,谢谢你的提示。设法用你的解决方案解决了它,这很奇怪。
0赞 fantasticrice 7/25/2015
谢谢,这也是我的问题。
0赞 Anja Ishmukhametova 7/27/2015
就我而言,这个提示对我有帮助
2赞 Eric S. Bullington 7/30/2015
字段集也是我的问题。就我而言,答案在这里找到:stackoverflow.com/a/30785150/1002047 似乎是 Chrome 错误(因为有问题的 HTML 使用 W3C 的验证器进行验证)。只需将我的字段集更改为 div 即可解决问题。
1赞 rinilnath 12/2/2021
@Pere,我用另一种方式纠正了这个问题,下面“abhinav kinagi”的答案提供了线索,还有其他字段正在验证,进一步导致了相同的错误(不可聚焦的错误)。因此,我必须在 hide() 期间删除验证属性,并在 Jquery 中的 show() 中再次添加它。
8赞 maniempire 8/28/2015 #9

如果您有任何具有必需属性的字段,而该字段在表单提交期间不可见,则将引发此错误。当您尝试隐藏该字段时,您只需删除所需的属性即可。如果要再次显示该字段,可以添加所需的属性。这样,您的验证不会受到影响,同时也不会引发错误。

评论

0赞 fWd82 3/15/2018
提示:或者相反,你可以属性/属性。>> jQuery 将必填项添加到输入字段$("input").attr("required", "true");$("input").prop('required',true);remove
2赞 Nick Taras 9/7/2015 #10

对于 Angular 使用:

ng-required=“布尔值”

仅当值为 true 时,这将应用 html5 'required' 属性。

<input ng-model="myCtrl.item" ng-required="myCtrl.items > 0" />
12赞 Sam 12/15/2015 #11

如果您在复选框输入上遇到错误,还有另一种可能性。如果您的复选框使用自定义 CSS,该 CSS 隐藏了默认值并将其替换为其他样式,这也将触发 Chrome 中验证错误时无法聚焦的错误。

我在我的样式表中找到了这一点:

input[type="checkbox"] {
    visibility: hidden;
}

简单的解决方法是将其替换为:

input[type="checkbox"] {
    opacity: 0;
}

评论

0赞 Rob 2/2/2017
这也是我发现最有效的解决方案。它允许错误消息实际显示在不可见的窗体控件附近。
10赞 SudarP 2/18/2016 #12

对于 Select2 Jquery 问题

问题是由于 HTML5 验证无法聚焦隐藏的无效元素。 我在处理 jQuery Select2 插件时遇到了这个问题。

溶液您可以在表单的每个元素上注入事件侦听器和“无效”事件,以便您可以在 HTML5 验证事件之前进行操作。

$('form select').each(function(i){
this.addEventListener('invalid', function(e){            
        var _s2Id = 's2id_'+e.target.id; //s2 autosuggest html ul li element id
        var _posS2 = $('#'+_s2Id).position();
        //get the current position of respective select2
        $('#'+_s2Id+' ul').addClass('_invalid'); //add this class with border:1px solid red;
        //this will reposition the hidden select2 just behind the actual select2 autosuggest field with z-index = -1
        $('#'+e.target.id).attr('style','display:block !important;position:absolute;z-index:-1;top:'+(_posS2.top-$('#'+_s2Id).outerHeight()-24)+'px;left:'+(_posS2.left-($('#'+_s2Id).width()/2))+'px;');
        /*
        //Adjust the left and top position accordingly 
        */
        //remove invalid class after 3 seconds
        setTimeout(function(){
            $('#'+_s2Id+' ul').removeClass('_invalid');
        },3000);            
        return true;
}, false);          
});
4赞 Kartik Shenoy 6/11/2016 #13

是的。。如果隐藏的窗体控件具有必填字段,则会显示此错误。一种解决方案是禁用此窗体控件。这是因为通常,如果您隐藏窗体控件,那是因为您不关心它的值。因此,在提交表单时不会发送此表单控件名称值对。

评论

1赞 Gabe Kopley 8/23/2016
谢谢你的这个主意!切换所有有时隐藏的表单元素对我来说很有用,无论是否需要单个元素,所以我的逻辑很好,很简单:)
4赞 Mouneer 10/28/2016 #14

另一个可能的原因,在之前的所有答案中都没有涵盖,当你有一个带有必填字段的普通表单,你提交了表单,然后在提交后直接隐藏它(使用 javascript),没有时间让验证功能工作。

验证功能将尝试将焦点放在必填字段上并显示错误验证消息,但该字段已被隐藏,因此会出现“name='' 的无效窗体控件无法聚焦!

编辑:

要处理这种情况,只需在提交处理程序中添加以下条件

submitHandler() {
    const form = document.body.querySelector('#formId');

    // Fix issue with html5 validation
    if (form.checkValidity && !form.checkValidity()) {
      return;
    }

    // Submit and hide form safely
  }

编辑:解释

假设您在提交时隐藏表单,此代码可保证在表单生效之前不会隐藏表单/字段。因此,如果一个字段无效,浏览器可以毫无问题地专注于它,因为该字段仍然显示。

5赞 Frankenmint 2/21/2017 #15

我来这里是为了回答说,我自己触发了这个问题,因为没有关闭标签并且在同一页面上有多个表单。第一种形式将扩展到包括寻求对来自其他地方的表格输入的验证。由于这些表单是隐藏的,因此它们触发了错误。</form>

例如:

<form method="POST" name='register' action="#handler">


<input type="email" name="email"/>
<input type="text" name="message" />
<input type="date" name="date" />

<form method="POST" name='register' action="#register">
<input type="text" name="userId" />
<input type="password" name="password" />
<input type="password" name="confirm" />

</form>

触发器

name='userId' 的无效窗体控件不可聚焦。

具有 name='password' 的无效窗体控件不可聚焦。

name='confirm' 的无效窗体控件不可聚焦。

评论

0赞 Aaron D 4/14/2023
谢谢你!这正是我面临的问题
11赞 ghuroo 4/7/2017 #16

可能是您隐藏了具有必需属性的字段(显示:无)。

请检查所有必填字段对用户可见:)

33赞 Gus 4/26/2017 #17

就我而言,问题在于隐藏:input type="radio" required

visibility: hidden;

此错误消息还将显示所需的输入类型是否具有 CSS 属性。radiocheckboxdisplay: none;

如果要创建自定义单选/复选框输入,并且它们必须在 UI 中隐藏并仍保留属性,则应改用:required

opacity: 0;CSS 属性

评论

0赞 Inzmam ul Hassan 7/24/2017
同样的问题,除了我使用的是选择性 .js 库,它隐藏了当前的选择框并显示一个带有 JS 和 CSS 的替代 JS 框。当我在它上面使用 required 时,它会抛出此错误 form-field.js:8 create:1 name='listing_id' 的无效表单控件不可聚焦。CNY sugestion 我怎么能工作。
0赞 Gus 7/25/2017
@InzmamGujjar据我了解,您的 js 插件正在创建另一个具有自己类的选择输入。也许更改插件 CSS 类或选择创建的输入而不是原始输入?name=""
1赞 colemerrick 4/22/2021
有用的答案。如果您想保留与 display: none 相同的布局/样式,我会添加一个位置:absolute。Display: none 会删除元素及其在页面上占用的空间,但 visibility: hidden 只会在视觉上隐藏元素。
0赞 Reena Verma 5/28/2021
@Gus - 很棒的解决方案,这对我有用!
0赞 Besworks 5/20/2022
也不要忘记确保不可见的元素不会从任何可能最终堆叠在其下方的元素中窃取点击。您还可以微调验证弹出窗口的位置,使其与您的自定义替换项保持一致:pointer-events: none;transform: translate(2rem, 1.5rem);
5赞 Umar Asghar 11/18/2017 #18

有很多方法可以解决这个问题,比如

  1. 将 novalidate 添加到您的表单中,但它完全错误,因为它将删除表单验证,这将导致用户输入错误的信息。

<form action="...." class="payment-details" method="post" novalidate>

  1. 使用可以从必填字段中删除必需属性,这也是错误的,因为它将再次删除表单验证。

    取而代之的是:

<input class="form-control" id="id_line1" maxlength="255" name="line1" placeholder="First line of address" type="text" required="required">

   Use this:

<input class="form-control" id="id_line1" maxlength="255" name="line1" placeholder="First line of address" type="text">

  1. 当您不打算提交表单而不是执行其他选项时,“使用”可以禁用必填字段。在我看来,这是推荐的解决方案。

    喜欢:

<input class="form-control" id="id_line1" maxlength="255" name="line1" placeholder="First line of address" type="text" disabled="disabled">

或通过 JavaScript/jQuery 代码禁用它取决于您的方案。

评论

0赞 Stepan J. 6/13/2023
我要说的 #3 点是最相关的解决方案。我很惊讶这在这里排名不高。
3赞 Gustavo Soler 12/25/2017 #19

有些事情仍然让我感到惊讶......我有一个表单,其中包含两个不同实体的动态行为。一个实体需要一些字段,而另一个实体不需要。 因此,根据实体的不同,我的 JS 代码会执行以下操作: $('#periodo').removeAttr('必需'); $(“#periodo-容器”).hide();

当用户选择其他实体时: $(“#periodo-容器”).show(); $('#periodo').prop('必需', true);

但有时,当提交表单时,会出现问题:“名称=periodo''的无效表单控件不可聚焦(我对 id 和 name 使用相同的值)。

要解决此问题,您必须确保设置或删除“必需”的输入始终可见。

所以,我所做的是:

$("#periodo-container").show(); //for making sure it is visible
$('#periodo').removeAttr('required'); 
$("#periodo-container").hide(); //then hide

这解决了我的问题......难以置信。

2赞 KHACHORNCHIT 4/27/2018 #20

我在使用 Angular JS 时发现了同样的问题。这是由于将 requiredng-hide 一起使用引起的。当我单击提交按钮时,此元素被隐藏,然后发生错误:名称=''无效的表单控件不可聚焦。 最后!

例如,将 ng-hide 与 required 一起使用:

<input type="text" ng-hide="for some condition" required something >

我通过用 ng-pattern 替换 required 来解决它。

例如解决方案:

<input type="text" ng-hide="for some condition" ng-pattern="some thing" >
3赞 Chareesa Graham 8/17/2018 #21

就我而言..

ng-show正在被使用。
被放在它的位置并修复了我的错误。
ng-if

2赞 deerawan 2/6/2019 #22

不仅在指定时,我在使用时也遇到了这个问题,例如requiredminmax

<input type="number" min="1900" max="2090" />

该字段可以隐藏并根据其他无线电值显示。因此,对于临时解决方案,我删除了验证。

评论

0赞 jjonesdesign 8/19/2020
点击向上按钮,这是我的问题。Min 高于数字输入的默认值。
2赞 Kent 2/28/2019 #23

我经常看到这个问题被问到,我自己也遇到过这个“错误”。甚至有链接质疑这是否是 Chrome 中的实际错误。
这是当一个或多个表单输入类型元素被隐藏并且这些元素具有最小/最大限制(或其他一些验证限制)时发生的响应。

在创建表单时,没有归因于元素的值,稍后元素值可能会被填充或保持不变。 在提交时,将对表单进行解析,超出这些验证限制的任何隐藏元素都会将此“错误”抛出控制台,并且提交将失败。由于您无法访问这些元素(因为它们是隐藏的),因此这是唯一有效的响应。

这不是实际的故障或错误。它表示即将提交的元素值超出了一个或多个元素规定的限制。

要解决此问题,请在提交表单之前的任何时间为表单中隐藏的任何元素分配有效的默认值,然后这些“错误”将永远不会发生。它本身不是一个错误,它只是迫使你养成更好的编程习惯。

注意:如果您希望将这些值设置为验证限制之外的值,请使用 form.addEventListener('submit', myFunction) 拦截 'submit' 事件并在 “myFunction” 中填充这些元素。似乎验证检查是在调用“myFunction()”之前执行的。

2赞 Kevin Marmet 3/14/2019 #24

我想在这里回答,因为这些答案或任何其他 Google 结果都没有为我解决问题。

对我来说,它与字段集或隐藏输入无关。

我发现如果我使用(例如)它会产生这个错误。如果我用...没有错误。max="5"maxlength="5"

我能够多次重现错误和清除错误。

我仍然不知道为什么使用该代码会产生错误,就这一点而言,即使没有我相信的“min”,它也应该是有效的。

评论

0赞 Ricardo Green 8/14/2019
我的是用类似的方式解决的,但配置是.min='-9999999999.99' max='9999999999.99'
7赞 Inc33 6/22/2020 #25

奇怪的是,每个人都建议删除验证,而验证的存在是有原因的...... 无论如何,如果使用自定义控件,并且想要维护验证,则可以执行以下操作:

第一步。从输入中删除 display none,使输入变得可聚焦

.input[required], .textarea[required] {
    display: inline-block !important;
    height: 0 !important;
    padding: 0 !important;
    border: 0 !important;
    z-index: -1 !important;
    position: absolute !important;
}

第二步。如果样式不够,则在输入上添加无效的事件处理程序,以用于特定情况

inputEl.addEventListener('invalid', function(e){
   //if it's valid, cancel the event
   if(e.target.value) {
       e.preventDefault();
   }
}); 

评论

0赞 northamerican 2/2/2021
替换为我的样式输入就足够了。谢谢。display:noneposition: absolute; opacity: 0;
20赞 Abhinav Kinagi 7/23/2020 #26

不仅是其他答案中提到的必填字段。它也是由于<input> 字段放置在包含无效值的隐藏 <div> 中引起的。

考虑下面的例子,

<div style="display:none;">
   <input type="number" name="some" min="1" max="50" value="0">
</div> 

这会引发相同的错误。因此,请确保隐藏中的字段不包含任何无效值。<input><div>

评论

0赞 MD. Shafayatul Haque 9/2/2020
为我工作。谢谢
0赞 rinilnath 11/23/2021
嗨,就我而言,这是由于一个特定表单的数据库值无效:输入字段。有没有办法仅取消 .hide() 字段的验证?
0赞 Liam McArthur 4/5/2022
在我的场景中,我的最小值为 1,但从数据库中提取了一个值 0,该值保存在一个隐藏的选项卡中。
3赞 HoldOffHunger 10/31/2021 #27

哇,这里有很多答案!

如果问题是 ,那么您只需几行即可解决此问题。<input type="hidden" required="true" />

逻辑简单明了:

  1. 在页面加载时用一个类标记每个必需的输入。data-required
  2. 提交时,执行两件事:a) 从所有隐藏输入中添加到所有 required=“true”'。required="true"data-required inputs. b) Remove

[HTML全

<input type="submit" id="submit-button">

纯 JavaScript

document.querySelector('input,textarea,select').filter('[required]').classList.add('data-required');

document.querySelector('#submit-button').addEventListener('click', function(event) {
    document.querySelector('.data-required').prop('required', true);
    document.querySelector('input,textarea,select').filter('[required]:hidden').prop('required', false);
    return true;
}

j查询

$('input,textarea,select').filter('[required]').addClass('data-required');

$('#submit-button').on('click', function(event) {
    $('.data-required').prop('required', true);
    $('input,textarea,select').filter('[required]:hidden').prop('required', false);
    return true;
}
19赞 Ayesha 4/7/2022 #28

当您向输入字段提供 style=“display: none;” 和 required 属性时,会出现此问题,并且提交时将进行验证。 例如:

<input type="text" name="name" id="name" style="display: none;" required>

可以通过从 HTML 的输入字段中删除必需属性来解决此问题。如果需要添加必需属性,请动态添加。如果您使用的是 JQuery,请使用以下代码:

$("input").prop('required',true);

如果需要动态删除此字段,

$("input").prop('required',false);

如果您不使用 JQuery,也可以使用纯 Javascript:

document.getElementById('element_id').removeAttribute('required');
10赞 Serdar D. 8/17/2022 #29

如果隐藏具有必需属性的输入元素,则会发生这种情况。

你可以用display:noneopacity: 0;

我还必须使用一些CSS规则(如)来完美地定位我的元素。position:absolute

3赞 Y. Joy Ch. Singha 12/22/2022 #30

在您的输入中。你保留隐藏输入,这就是它抛出以下原因的原因:formrequired

An invalid form control with name='' is not focusable

检查您的输入名称是否无效,您将其隐藏且为必填项。

只需从隐藏的输入名称中删除 即可。做。required