请问为什么input在输入中文的时候,还在输入字母的时候就判断为非空了?

bug之所措
  • 355
$("input").on("focus",function(){

    $("input").on("keyup",function(){

        var neirong = $(this).val();
        if($(this).val() != ""){
        $(".search-result").css("display","block");
        $(".search-result .result-tt").find("a").text("搜"+neirong+"的用户");
        }

        if($(this).val() == ""){
            $(".search-result").css("display","none");
        }

    });
    
});

请问一下为什么当我要输入中文,我中文还没打出来的时候,搜索框就出来了,这是我代码的问题,还是我少了哪一步判断啊????
前端辣鸡小白,希望有大神不嫌弃愿意帮帮我。。感激

回复
阅读 3.4k
4 个回答

监听input事件就行了,你这个嵌套完全没必要,且把代码搞复杂了

-------------更新------------------

开始中文输入时会触发compositionstart事件
选词结束后会触发compositionend事件
类似于keydown和keyup
解决办法,在外层设置一个状态flag,在这两个事件过程中flag=false,在事件完成后flag=true。

<input id="txt" type="text">
<script>
    var flag = true;
    $('#txt').on('compositionstart',function(){
        flag = false;
    })
    $('#txt').on('compositionend',function(){
        flag = true;
    })
    $('#txt').on('input',function(){
        var _this = this
        return setTimeout(function(){
            if(flag && $(_this).val() !== ''){//判断flag和输入的值
                return console.log($(_this).val());
            }
        },0)
    })
</script>

输入法特性如此,代码没问题
可以加个一定时间内没输入再去搜索的判断

冯皓天
  • 2
新手上路,请多包涵

可以在input框失去焦点时判断输入框是否为空。

用 oninput 事件 可以监听中文输入,keyup是不能监听中文输入的.

你知道吗?

宣传栏