兼容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(); }); });
运行效果:



浙公网安备 33010602011771号