我是靠谱客的博主 大气香水,最近开发中收集的这篇文章主要介绍中文输入法触发input事件 js绑定事件:addEventListener和on的区别 select下拉框用empty()方法 清空option,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

中文输入法触发input事件

compositionstart
当浏览器有非直接的文字输入时, compositionstart事件触发.

compositionend
当浏览器是直接的文字输入时, compositionend事件触发

解决方法:
在这里插入图片描述
这里还有一个问题:
在有些浏览器如谷歌中,先响应input后响应compositionend,此时状态inputLock为true导致input内部方法无法执行。
若要解决这个问题:
可以在compositionend中也加上input方法体,但是这样太繁琐。
另一种方法是给input内部方法设置了setTimeout,0.
在这里插入图片描述
这些方法均有可能导致在其他环境下input内部方法被执行两次。

input事件中文触发多次问题研究
https://www.cnblogs.com/mopagunda/p/8343031.html
这里的解决办法是用键盘按键监听代替input来监听输入框内容得改变。因为keyup和compositionend事件执行顺序在各大浏览器都保持一致,在keyup中执行内部方法。但是由粘贴引起的变化无法执行。因此增加input事件处理非键盘引起的改变,keyup处理键盘引起的改变,这里增加一个键盘标志位即可。

$('input').on({
    keyup : function(e){        
        var flag = e.target.isNeedPrevent;
        if(flag)  return;     
        response() ;
        e.target.keyEvent = false ;
        
    },
    keydown : function(e){
        e.target.keyEvent = true ; 
    },
    input : function(e){
        if(!e.target.keyEvent){
            response()
        }        
    },
    compositionstart : function(e){
        e.target.isNeedPrevent = true ;
    },
    compositionend : function(e){
        e.target.isNeedPrevent = false;
        
    }
})
function response(){
        $('div').append('<p>事 件触发</p>')
}

解释一下上述代码:在输入中文时,按下键盘时先响应 keydown 和 compositionstart 事件,使 keyEvent=true,isNeedPrevent = true。在输入完成前每次释放按键keyup是不会每次都执行response()的,因为此时isNeedPrevent进行限制。而输入完成时,isNeedPrevent = false,此时就可以执行response()了,且keyEvent = false。若是鼠标粘贴引起的内容改变,e.target.keyEvent=false,会执行input事件中的response()方法了。

js绑定事件:addEventListener和on的区别

为某元素设定事件触发函数时,可能会觉得addEventListener和on事件的功能差不多,但是,addEventListener除了可以设置元素触发顺序外,还能多次绑定事件,因为 on 事件多次绑定的话会出现覆盖。

举例说明:
在这里插入图片描述结果会依次提示“message1”,“message2“。

但是js这么写的话:
在这里插入图片描述
这里就只会提示最后一个“message2”,因为onclick作为对象div1的一个属性,第二次对其进行赋值就会覆盖之前的函数值,这样on事件在某些场合就不适用了。

最后

以上就是大气香水为你收集整理的中文输入法触发input事件 js绑定事件:addEventListener和on的区别 select下拉框用empty()方法 清空option的全部内容,希望文章能够帮你解决中文输入法触发input事件 js绑定事件:addEventListener和on的区别 select下拉框用empty()方法 清空option所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部