Javascript 输入类型=电子邮件';当输入的值为空白时,s change事件未触发

Javascript 输入类型=电子邮件';当输入的值为空白时,s change事件未触发,javascript,jquery,html,validation,addeventlistener,Javascript,Jquery,Html,Validation,Addeventlistener,我在type=email输入元素中添加了一个on'change'事件侦听器。当我在email字段中添加几个空格字符,然后对该元素失去关注时,更改事件似乎不会触发 然而,这个确切的场景在type=text输入元素中运行良好 发生什么事了 $('input[type="email"]').change(e => { console.log('Triggered!'); }); 浏览器:Chrome版本63.0.3239.132(官方版本)(64位)我最初说它看起来像是在电子邮件字段上

我在
type=email
输入元素中添加了一个on'change'事件侦听器。当我在email字段中添加几个空格字符,然后对该元素失去关注时,更改事件似乎不会触发

然而,这个确切的场景在
type=text
输入元素中运行良好

发生什么事了

$('input[type="email"]').change(e => {
    console.log('Triggered!');
});

浏览器:Chrome版本63.0.3239.132(官方版本)(64位)

我最初说它看起来像是在电子邮件字段上执行了一个自动的
修剪操作,因为在键入一些空格并离开字段后,值的长度返回到0,但返回到字段后,空间保留在元素中,因此不会被修剪掉

我怀疑,由于空格对于这种输入类型无效,因此它们不被视为值的一部分,因此当您输入空格时,该值不会更改,并且不会触发
change
事件

在字段中键入一些空格,然后按TAB键离开该字段,然后返回该字段。空间仍然存在

$('input[type=“email”])。在(“blur”上,函数(e){
console.log(this.value.length);
});
$('input[type=“email”]”)。在(“更改”上,函数(e){
log(“已触发更改!”);
});

您可以使用类似的方法:

$('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”]
不计算空白。它只能作为快速黑客工作

输入[type=“email”]不会触发更改事件,请改用模糊事件:

$('input[type=“email”]).blur(函数(){
log('触发模糊事件');

});电子邮件地址中是否允许使用空格?(不是问题……只是讽刺……)所以。。。你想完成什么?自定义验证?@LouySpatriceBesette我想添加我自己的自定义样式错误消息,在提交表单之前检查字段。我想使用change listener,因为只有当用户实际输入值时,它才会验证用户是否只是在字段上单击。使用模糊侦听器是另一种选择-我只是觉得它有点烦人,如果字段失去焦点,它会抛出一个错误。我建议您使用loseFocus,因为当元素的值更改时,更改事件会发送到元素。此事件仅限于元素、框和元素。对于选择框、复选框和单选按钮,当用户使用鼠标进行选择时,会立即触发事件,但对于其他元素类型,事件将推迟到元素丢失焦点。如果您知道电子邮件在最后2个字符输入之前无效,那么您将对发送的每封信进行查询,如。uk将简化查询_user@somewhere.uk如果完全输入,onChange只会在电子邮件之后返回有效状态。即使在
keyup
上,如果只键入空格,则返回0。但两个字母之间的空格是计算在内的。因此,
确实被修剪了。。。字段中的内容似乎是其他东西。这是有意义的,因为从技术上讲,你不能在电子邮件上有空格,但是在代码>类型=“文本”你可以。@ TyyMm:它将是一个超级大的特性,它也在中间去除空格。但事实并非如此。@Louyspatricebesette这样做并不是一个非常好的功能,因为当空格在正确的上下文中时,在电子邮件地址中是合法的。只要正确转义,
@
的左边基本上允许任何内容。