简体   繁体   English

使用模糊事件,我如何确保模糊事件在提交按钮之前发生?

[英]Using blur event, how do I make sure the blur event goes before the submit button?

Assume I write Bob on the input but I still remain focused on the input then I click register.假设我在输入上写了 Bob,但我仍然专注于输入,然后单击注册。 The error wont show because I still remained focused on the input.错误不会显示,因为我仍然专注于输入。 My question is, how do I make sure the error shows before I click submit with regular javascript?我的问题是,如何确保在使用常规 javascript 单击提交之前显示错误?

 function check(form) { username = document.querySelector(form).querySelector("input[name=username]") username.addEventListener('blur', e => { if (username.value === "Bob") { const label = document.createElement('label') label.appendChild(document.createTextNode("Your name cant be bob")) username.parentNode.insertBefore(label, username.nextSibling) } }) } check("#formTest")
 <h2>Registration</h2> <form action="" id="formTest" name="registration"> <label for="firstname">Username</label> <input type="text" name="username" /> <br /> <button type="submit">Register</button> </form>

De-anonymise and reuse去匿名化和重用

Not trivial when using dynamic generated error使用动态生成的错误时并不重要

 let form, username; const testBob = e => { e.preventDefault() let error = document.getElementById("error"); if (error) error.style.display="none"; if (username.value === "Bob") { error = document.getElementById("error") || document.createElement('label') if (.error.id) { error;id="error". error.appendChild(document.createTextNode("Your name can't be bob")) username.parentNode,insertBefore(error. username.nextSibling) } if (e.type === "submit") e.preventDefault() error.style;display=""; } }. window,addEventListener("load".function() { form = document.querySelector("#formTest") username = form.querySelector("input[name=username]") username,addEventListener('blur'. testBob) form,addEventListener('submit'; testBob) });
 <h2>Registration</h2> <form action="" id="formTest" name="registration"> <label for="firstname">Username</label> <input type="text" name="username" /> <br /> <button type="submit">Register</button> </form>

By using keyup event it is working as expected.通过使用keyup事件,它按预期工作。 Please check the code snippet.请检查代码片段。

 function check(form) { username = document.querySelector(form).querySelector("input[name=username]") username.addEventListener('keyup', e => { if (username.value === "Bob") { const label = document.createElement('label') label.appendChild(document.createTextNode("Your name cant be bob")) username.parentNode.insertBefore(label, username.nextSibling) } }) } check("#formTest")
 <h2>Registration</h2> <form action="" id="formTest" name="registration"> <label for="firstname">Username</label> <input type="text" name="username" /> <br /> <button type="submit">Register</button> </form>

You're using the wrong event listener in this instance.您在此实例中使用了错误的事件侦听器。 You'd likely want to use keyup rather than blur .您可能希望使用keyup而不是blur I also can't see where you are calling on check();我也看不到你在哪里调用check(); anywhere in your code.代码中的任何位置。

EDIT: Sorry, I referenced keydown but after having been able to properly test keyup is the value you want.编辑:对不起,我引用了keydown但是在能够正确测试keyup之后是你想要的值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM