[英]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.