兼容IE浏览器下input初始化自动执行监听input值变化的问题

问题描述:

在开发项目中,写了如下代码,监听#searchNav的input值的改变,从而实现实时查询,思路是,查找到了相应的值就将查询到的结果显示出来。在火狐,谷歌等浏览器下都没有任何问题,但是IE浏览器下,刚登录到后台系统时,正常,但是在刷新一次页面后,那个查询结果的框默认就显示出来了,网上找了各种方法,才最终实现效果。

问题就是IE浏览器下也会监听placeholder的事件。IE浏览器下placeholder改变(注意这个改变的就算前后的placeholder值一样也算改变;还有就是input获得焦点时和失去焦点时,也会改变;但是改变前后都设置为空字符串则不算改变)

以下是有问题的代码

$("#searchNav").bind('input propertychange', function () {
       getSearchNav();
});
function getSearchNav() {
    alert("开始搜索了!");
    var inputval = $("#searchNav").val();
    var allMenuData = JSON.parse(sessionStorage.getItem("AllauthorizeMenuData"));
    var loadindex = 0;
    var html = "";
    lastResult = [];
    $.each(allMenuData, function (i, o) {
        if (o.FULLNAME != null && o.FULLNAME != undefined && o.FULLNAME != "") {
            if (o.FULLNAME.indexOf(inputval) > -1) {
                //lastResult.push(o.FULLNAME);
                if (loadindex < 20) {
                    html += "<li title='" + o.FULLNAME + "' id='" + o.MODULEID + "'>" + o.FULLNAME + "</li>"
                    loadindex++;
                }

            }
        }
        
    });
    if (html != "") {
        alert(123);
        $("#result-nav").html(html);
        $(".input-results").show();
    }
    //lastInputVal = inputval;
}

修改上述绑定事件为,先侦听获取焦点后,将placeholder改变为空,失去焦点后,placeholder再恢复就行。

            var inputsearchNav = document.getElementById("searchNav");
            inputsearchNav.addEventListener("focus", function (e) {
                e.target.placeholder = '';
                $("#searchNav").bind('input propertychange', function () {
                    getSearchNav();
                });
            });

            inputsearchNav.removeEventListener("blur", function (e) {
                e.target.placeholder = '请输入关键字';
                $("#searchNav").unbind('input propertychange', function () {
                    getSearchNav();
                });
            });     

运行效果:

 

posted @ 2019-11-14 14:37  pheosia  阅读(582)  评论(0)    收藏  举报