Javascript 是否可以在表单提交时检测哪个输入字段无效?
使用下面的代码,我可以使用.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 是否可以在表单提交时检测哪个输入字段无效?,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
下面是一个可能的解决方案,它不使用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;
});
});
这里是在没有验证的情况下处理更多的元素
这将绑定每次输入更改时要执行的更改代码。这是一个示例,因此它仅切换数组中的值。当您想要验证时,只需检查哪些是错误的。若您将元素存储在数组中,则可以声明哪个元素。只需切换索引逻辑即可添加/删除阵列
但有了这个装置,你们可以做得更好,你们可以写出对无效元素的即时反应。代替更改数组中的索引,您可以提示警报、显示错误、使元素变为红色。基本上,当用户的注意力集中在元素之外的时候,他就会与用户进行交互,而不是在之后的某个时候被动地进行交互。不幸的是,这无助于解决问题,但感谢您的回答。是的,谢谢。无论如何,我希望它对你有用。谢谢约翰,这帮我解决了我的问题,做了一些调整,我发布了我问题的答案,你可以在上面看到,我已经对你的答案投了赞成票。当然。如果这解决了您的问题,如果您不介意,请将其标记为已解决: