Javascript 是否可以在表单提交时检测哪个输入字段无效?

Javascript 是否可以在表单提交时检测哪个输入字段无效?,javascript,jquery,html,forms,Javascript,Jquery,Html,Forms,使用下面的代码,我可以使用.oninvalid函数来检测提交表单时字段是否存在错误。如果有错误,我会检查输入和文本区域是否都是空的,是否太长或太短,然后添加class.error 然而,我想知道是否有任何方法可以简化我的代码,这样我就不必在函数中运行额外的if语句 $form input,form textarea.oninvalid,functionevent{ var input1=document.getElementById'input1'; var input2=document.g

使用下面的代码,我可以使用.oninvalid函数来检测提交表单时字段是否存在错误。如果有错误,我会检查输入和文本区域是否都是空的,是否太长或太短,然后添加class.error

然而,我想知道是否有任何方法可以简化我的代码,这样我就不必在函数中运行额外的if语句

$form input,form textarea.oninvalid,functionevent{ var input1=document.getElementById'input1'; var input2=document.getElementById'input2'; 如果!input1.value | | input1.value.length<9 | | input1.value.length>69{ input1.classList.add'error'; setTimeoutfunction{ input1.classList.remove'error'; }, 500; } 如果!input2.value | | input2.value.length<21 | | input2.value.length>899{ input2.classList.add'error'; setTimeoutfunction{ input2.classList.remove'error'; }, 500; } }; .错误{ 边框:1px纯红; }
下面是一个可能的解决方案,它不使用javascript精确地查找目标,而是使用html中的oninvalid事件侦听器

当表单返回invalid时,它将作为输入事件触发,而不是打包为表单事件。当表单提交时特定输入不正确时,您可以让它在javascript中执行任何您喜欢的操作。

提交活动可能是一个更好的选择。对所有浏览器都有效

相反,如果使用oninvalid,您将发现Safari浏览器存在问题

<form onsubmit="validateForm()">
  Enter name: <input type="text">
  <input type="submit">
</form>

function validateForm() {
    //your code here
    if(validationfails){
        return false; //if arrives here means the form won't be submited
    }
}

我能够解决这个问题,特别是感谢John Paul Penaloza的建议,在input和textarea字段上使用oninvalid。我调用了一个函数,然后将class.error添加到输入字段中-它与我问题中的代码相同,但更简单:

函数错误字段{ field.classList.add'error'; setTimeoutfunction{ 字段。类列表。删除“错误”; }, 500; } .错误{ 边框:1px纯红; }
或者,您可以换一种思路,提供实时错误报告

将id=myForm添加到元素中,然后在以下行中使用Js:

var allInputs = $('#myForm :input');
var inputsFuked = []

allInputs.each(function( index ) {
    console.log(allInputs[index]);
  $(allInputs[index]).change(function() {
    if (allInputs[index].checkValidity()) inputsFuked[index]=1;
    else inputsFuked[index]=0;
    });
});
这里是在没有验证的情况下处理更多的元素

这将绑定每次输入更改时要执行的更改代码。这是一个示例,因此它仅切换数组中的值。当您想要验证时,只需检查哪些是错误的。若您将元素存储在数组中,则可以声明哪个元素。只需切换索引逻辑即可添加/删除阵列


但有了这个装置,你们可以做得更好,你们可以写出对无效元素的即时反应。代替更改数组中的索引,您可以提示警报、显示错误、使元素变为红色。基本上,当用户的注意力集中在元素之外的时候,他就会与用户进行交互,而不是在之后的某个时候被动地进行交互。

不幸的是,这无助于解决问题,但感谢您的回答。是的,谢谢。无论如何,我希望它对你有用。谢谢约翰,这帮我解决了我的问题,做了一些调整,我发布了我问题的答案,你可以在上面看到,我已经对你的答案投了赞成票。当然。如果这解决了您的问题,如果您不介意,请将其标记为已解决: