[英]Input type=email's change event is not firing when the value entered is whitespace
我向type=email
输入元素添加了一个 on 'change' 事件侦听器。 当我在电子邮件字段中添加几个空格字符,然后失去对该元素的关注时,更改事件似乎没有触发。
但是,这个确切的场景适用于type=text
输入元素。
这是怎么回事?
$('input[type="email"]').change(e => {
console.log('Triggered!');
});
浏览器:Chrome 版本 63.0.3239.132(官方版本)(64 位)
我最初说看起来好像对电子邮件字段执行了自动trim
操作,因为在键入一些空格并离开该字段后,该值的长度又回到了 0,但是在返回该字段时,空格仍保留在元素中,所以它们不会被修剪掉。
我怀疑,因为空格对于此输入类型无效,因此它们不被视为值的一部分,因此当您输入它们时该值不会change
并且不会触发change
事件。
在字段中键入一些空格,然后按 TAB 键离开该字段,然后返回该字段。 空间仍然存在。
$('input[type="email"]').on("blur", function(e){ console.log(this.value.length); }); $('input[type="email"]').on("change", function(e){ console.log("Change fired!"); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input type="email">
你可以使用这样的东西:
$('input[type="email"]').on('focusout', {
console.log('Triggered!');
var $trig = $(this);
$trig.attr('trimmed', $trig.val().toString().trim());
$trig.val( '').val($trig.attr('trimmed'));
});
但是,如上所述, input[type="email"]
不计算空格。 它只能作为快速 hack 使用;
input[type="email"] 不会触发更改事件,而是使用模糊事件:
$('input[type="email"]').blur(function(){ console.log('blur event is fired.'); });
我在 React 中遇到了同样的问题,我不想在 onBlur 事件上反映错误(就像这里的其他解决方案一样)。 我不认为错误应该通过从该输入中移除鼠标的简单事实反映在任何输入中。 对我来说,这不是用户友好的,......根本。
为什么?
对我来说,验证用户从输入中写入和/或删除/删除的内容(onChange 验证)以及用户最终决定发送的内容(onSubmit 验证)就足够了。 onChange 和 onSubmit 验证的适当组合是彻底性和用户友好之间的完美平衡。
所罗门“解决方案”:
我正在使用自定义验证挂钩。 由于我无法使用有关 OnChange 事件中的空格的类型电子邮件更改输入的行为,...然后我决定使用一种解决方法,这只是避免输入空格,仅此而已,作为 onChange无论如何都不会触发事件。
const preventWhiteSpaceOnKeyDown = (e) => {
if (e.key === " ") {
e.preventDefault();
}
}
. . .
<input
type={"email"}
id='commentEmail'
name='commentEmail'
required={true}
autoFocus={true}
ref={emailInputRef}
value={emailState}
onChange={emailInputChangeHandler}
onKeyDown={preventWhiteSpaceOnKeyDown}
/>
这不是“解决方案”。 对此没有干净的解决方案。 但在此之后,至少我的 input[type=email] 元素不会包含无用的空格。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.