名称=''的无效表单控件不可聚焦

本文探讨了在Google Chrome浏览器中遇到的网页表单提交问题,特别是关于隐藏字段的必填属性导致的“An invalid form control with name '' is not focusable”错误。文章提供了多种解决方案,包括使用JavaScript禁用隐藏字段的验证,以及移除隐藏输入框的required属性。
部署运行你感兴趣的模型镜像

本文翻译自:An invalid form control with name='' is not focusable

I have an acute problem on my website. 我的网站上有一个严重的问题。 In Google Chrome some customers are not able to proceed to my payment page. 在Google Chrome浏览器中,某些客户无法进入我的付款页面。 When trying to submit a form I get this error: 尝试提交表单时出现此错误:

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

This is from the JavaScript console. 这来自JavaScript控制台。

I read that the problem could be due to hidden fields having the required attribute. 我读到问题可能是由于隐藏字段具有必填属性。 Now the problem is that we are using .net webforms required field validators, and not the html5 required attribute. 现在的问题是,我们使用的是.net Webforms必需的字段验证器,而不是html5必需的属性。

It seems random who gets this error. 似乎谁得到此错误是随机的。 Is there anyone who knows a solution for this? 有谁知道解决方案吗?


#1楼

参考:https://stackoom.com/question/1Uvj6/名称-的无效表单控件不可聚焦


#2楼

向表单添加novalidate属性将有助于:

<form name="myform" novalidate>

#3楼

In case anyone else has this issue, I experienced the same thing. 万一其他人遇到这个问题,我也会遇到同样的事情。 As discussed in the comments, it was due to the browser attempting to validate hidden fields. 如评论中所讨论的,这是由于浏览器试图验证隐藏字段而引起的。 It was finding empty fields in the form and trying to focus on them, but because they were set to display:none; 它正在查找表单中的空字段并试图将其重点关注,但是因为它们被设置为display:none; , it couldn't. ,它不能。 Hence the error. 因此,错误。

I was able to solve it by using something similar to this: 我可以通过使用类似于以下内容的方法来解决此问题:

$("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.
});

Also, this is possibly a duplicate of "Invalid form control" only in Google Chrome 此外,这可能仅在Google Chrome中“无效的表单控件”的重复项


#4楼

In your form , You might have hidden input having required attribute: 在您的form ,您可能隐藏了具有required属性的input

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

The form can't focus on those elements, you have to remove required from all hidden inputs, or implement a validation function in javascript to handle them if you really require a hidden input. form不能专注于这些元素,如果您确实需要隐藏的输入,则required从所有隐藏的输入中删除required元素,或者在javascript中实现验证功能以处理它们。


#5楼

It will show that message if you have code like this: 如果您具有以下代码,它将显示该消息:

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

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

#6楼

You may try .removeAttribute("required") for those elements which are hidden at the time of window load. 您可以尝试.removeAttribute("required")那些在窗口加载时隐藏的元素。 as it is quite probable that the element in question is marked hidden due to javascript (tabbed forms) 因为所讨论的元素很可能由于javascript(选项卡式表单)被标记为隐藏

eg 例如

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

This should do the task. 这应该完成任务。

It worked for me... cheers 对我有用...干杯

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

<think>首先,用户的问题是:“我想解决表单控件无法聚焦的问题 请问无法聚焦表单控件 name=email”。这看起来是一个技术问题,关于表单控件无法聚焦。 用户提供了几个引用,我需要参考这些引用来回答。引用是关于HTML表单元素的,特别是如何使用标签、属性等。用户的问题具体是关于无法聚焦于名为“email”的表单控件。 关键点: - 用户提到“无法聚焦”,意思是表单控件(如输入框)无法获得焦点,即用户点击时无法激活。 - 控件name="email"。 从引用中提取相关信息: - 引用[1]:讨论了在水平表单中使用静态文本,但这不是直接相关的。 - 引用[2]:解释了<input>元素,提到了autofocus属性,可以让光标聚焦在input元素上。还提到了disabled属性,如果设置,会禁用input元素,导致无法聚焦。 - 引用[3]:解释了<label>标签如何改进可用性,点击标签会触发关联的表单控件。 - 引用[4]:关于HTML5表单新功能,如form属性,允许元素在表单外关联。 - 引用[5]:提到HTML5新增的表单控件类型,如tel类型。 用户的问题是“无法聚焦表单控件 name=email”。可能的原因: 1. 控件被禁用(disabled属性)。 2. 没有正确关联标签。 3. 其他属性如autocomplete或type设置错误。 4. HTML结构问题。 从引用[2],autofocus属性可以让元素自动聚焦,但用户的问题是手动无法聚焦。引用[2]也提到了disabled属性会禁用input元素。 所以,可能的原因是: - input元素有disabled属性。 - 或者,没有正确设置tabindex或其他焦点相关属性。 - 或者,标签没有正确关联,导致点击标签时无效。 用户指定了name="email",所以代码中可能类似:<input type="text" name="email" ...> 解决步骤: 1. 检查input元素是否有disabled属性。如果有,移除它。 2. 确保没有其他属性阻止聚焦,如readonly(但readonly允许聚焦,只是不能编辑)。 3. 检查<label>是否关联正确。使用for属性或嵌套input。 4. 考虑使用autofocus属性来初始聚焦5.HTML5中,确保元素在表单内或正确关联。 回答结构: - 系统级指令要求:使用$...$ for inline math, $$...$$ for display math, but this is not math-related, so probably not needed. 用户的问题是关于HTML表单的,没有数学内容,所以可以忽略数学格式要求。 - 使用中文回答。 - 生成相关问题。 - 在引用段落末尾添加引用标识。 - 回答结构清晰,逐步解决问题。 回答大纲: 1. 理解问题:解释用户的问题,关于表单控件无法聚焦。 2. 分析可能原因:基于引用,列出常见原因。 - 禁用状态(disabled属性)。 - 标签关联问题。 - 其他属性。 3. 提供解决方案:给出具体代码示例或步骤。 4. 生成相关问题。 引用相关部分: - 引用[2]提到:disabled属性会禁用input元素。 - 引用[3]提到:<label>标签可以改善可用性,点击标签会聚焦关联控件。 所以,在回答中引用这些。 最终回答: - 开头:确认问题。 - 原因分析:可能input被禁用,或标签未关联。 - 解决方案:检查并移除disabled属性;确保label正确关联。 - 代码示例:从引用中提取或创建。 - 结尾:生成相关问题。 相关问题: - 基于主题,如:如何修复表单控件焦点问题?HTML5表单焦点控制方法?等。 确保回答真实可靠:基于标准HTML知识。</think>### 解决表单控件无法聚焦的问题 您的问题是关于表单控件(`name="email"`)无法获得焦点(即点击时无法激活输入框)的解决方法。表单控件无法聚焦通常由几个常见原因引起,包括HTML属性设置错误、标签关联问题或浏览器兼容性问题。下面我将逐步分析可能原因并提供解决方案,确保回答基于标准HTML规范和最佳实践。您的引用内容提供了有价值的背景信息,我会在相关部分引用它们。 #### 步骤1: 检查并修复常见原因 表单控件无法聚焦的主要原因包括: - **控件被禁用(disabled属性)**:如果input元素设置了`disabled`属性,它会阻止用户交互,包括聚焦。这是最常见的问题。 - **标签未正确关联**:`<label>`元素如果未与input关联,点击标签时无法触发控件聚焦。 - **其他属性冲突**:如`autocomplete="off"`可能在某些浏览器中影响焦点行为,或`type`属性设置不当。 - **HTML结构错误**:例如,input元素未在表单内,或未使用HTML5的`form`属性正确关联。 基于您的引用[2],`disabled`属性会禁用input元素,导致无法聚焦[^2]: > //禁用 input > `<input name="user" disabled>` **解决方案:** 1. **移除或修改disabled属性**: - 检查您的HTML代码中,`name="email"`的input元素是否包含`disabled`属性。如果有,移除它或替换为`readonly`(如果只读但不阻止聚焦)。 - 示例代码修复: ```html <!-- 错误示例:disabled导致无法聚焦 --> <input type="text" name="email" disabled> <!-- 正确修复:移除disabled --> <input type="text" name="email" placeholder="请输入邮箱"> ``` 2. **确保标签正确关联**: - 使用`<label>`元素的`for`属性关联input的`id`,或嵌套input在label内。这样点击标签时,input会自动获得焦点。 - 根据引用[3],正确关联标签能显著改善可用性[^3]: > label标签不会向用户呈现任何特殊效果,它的作用是为鼠标用户改进了可用性。如果你在 label 标签内点击文本,就会触发此控件。 - 示例代码: ```html <!-- 正确关联label --> <label for="email">邮箱:</label> <input type="email" id="email" name="email"> <!-- 或嵌套方式 --> <label> 邮箱:<input type="email" name="email"> </label> ``` 3. **检查其他属性**: - 避免`autocomplete="off"`:在某些浏览器中,这可能干扰焦点。移除它或设为`on`。 - 使用`autofocus`属性:如果需要页面加载时自动聚焦,添加`autofocus`(但这不是解决手动聚焦问题的主要方法)。 - 引用[2]提到`autofocus`可以让光标初始聚焦[^2]: > //聚焦光标 > `<input name="user" autofocus>` 4. **处理HTML结构问题**: - 确保input元素在`<form>`内,或使用HTML5的`form`属性关联表单(如引用[4]所述[^4])。 ```html <!-- 表单外元素关联 --> <form id="myForm"></form> <input type="email" name="email" form="myForm"> ``` - 如果使用Bootstrap等框架,检查类名是否正确(如引用[1]中的`form-control-static`是静态文本,不用于可聚焦控件[^1])。 #### 步骤2: 测试和调试 - **测试方法**:在浏览器中打开开发者工具(F12),检查元素: - 确认`name="email"`的input没有`disabled`属性。 - 检查控制台是否有错误(如JavaScript冲突)。 - 使用`tabindex`属性:添加`tabindex="0"`确保元素可通过Tab键聚焦(示例:`<input name="email" tabindex="0">`)。 - **浏览器兼容性**:HTML5新类型(如`type="email"`)在旧浏览器可能不支持(引用[5]提到移动端键盘问题[^5])。测试在不同浏览器(Chrome、Firefox、Edge)中行为。 #### 步骤3: 完整示例代码 以下是一个修复后的完整表单示例,确保`name="email"`的控件聚焦: ```html <form id="signupForm"> <div class="form-group"> <label for="email">邮箱:</label> <input type="email" id="email" name="email" placeholder="请输入邮箱" class="form-control"> </div> <!-- 其他控件 --> <button type="submit">提交</button> </form> ``` - **关键点**: - 使用`label`的`for`属性关联`id="email"`。 - 无`disabled`属性。 - `type="email"`启用HTML5验证(但不会阻止聚焦)。 如果问题持续,提供更多代码片段,我可以进一步分析。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值