做搜索功能的时候,经常遇到输入框检查的需求,最常见的是即时搜索,今天好好小结一下。

即时搜索的方案:

(1)change事件    触发事件必须满足两个条件:

a)当前对象属性改变,并且是由键盘或鼠标事件激发的(脚本触发无效)
b)当前对象失去焦点(onblur)
 (2)keypress  恩,还好。。。。。就是能监听键盘事件,鼠标复制黏贴操作他就无能为力的赶脚了。。。。。
 (3)propertychange(ie)和input事件
input是标准的浏览器事件,一般应用于input元素,当input的value发生变化就会发生,无论是键盘输入还是鼠标黏贴的改变都能及时监听到变化

propertychange,只要当前对象属性发生改变。

比如一个input输入文字后出现下拉框,如图:

当输入框里面内容为空时,下拉框要隐藏,可以通过input和propertychange方法实现,代码如下:

  1. <script>
  2. $("#search").bind("input propertychange",function(){
  3. var value=$(this).val();
  4. if(value){
  5. $(".pc_search ul").show();
  6. }else{
  7. $(".pc_search ul").hide();
  8. }
  9. });
  10. </script>

这里bind同时绑定了input和propertychange两个方法。

自己项目的例子

//input输入框改变时
$("input[id='search-input']").bind('input propertychange', function() {
var val = $(this).val();
val = val.replace(/\s/g, '');
/*var arr = val.split(''+query+'');
console.log(arr);
if(val==query){
return false;
}*/
$(".re-search-tips").children('li').remove();
if (val !== "") {
$(".re-del").removeClass('disnone');
}
if (val == "" && query !== "") {
$(".re-search-tips").children('li').remove();
$(".re-search-tips li:contains('" + query + "')").html($(".re-search-tips li:contains('" + query + "')").html().replace(new RegExp('<span>' + query + '</span>', 'g'), '' + query + ''));
}
search(val);
});
//搜索教练
function search(val) {
query = val;
temp = query;
if (query !== "") {
$.ajax({
async: false,
url: getv1 + 'schedule/coachs',
type: 'GET',
dataType: 'json',
data: { query: query },
success: function(res) {
var qulen = res.data.length;
if (qulen > 0) {
var qulist = "";
for (var m = 0; m < qulen; m++) {
var conume = res.data[m].coachNum;
var name = res.data[m].name;
qulist += '<li><a href="subinfo.html?conum=' + conume + '">' + name + '</a></li>';
}
$(".re-search-tips").append(qulist);
var lilen = $(".re-search-tips").children('li').length;
console.log(lilen);
for(var q=0 ;q<lilen;q++){
$(".re-search-tips li:eq('"+q+"'):contains('" + query + "')").html($(".re-search-tips li:eq('"+q+"'):contains('" + query + "')").html().replace(new RegExp(query, 'g'), '<span>' + query + '</span>'));
}
/* $(".re-search-tips li:contains('" + query + "')").html($(".re-search-tips li:contains('" + query + "')").html().replace(new RegExp(query, 'g'), '<span>' + query + '</span>'));*/
}
},
error: function() {
layer.msg("服务器正忙碌,请稍后再试");
}
});
}
} //删除input框里面的值
function del() {
$("input[id='search-input']").val("");
$(".re-search-tips").children('li').remove();
$(".re-search-tips li:contains('" + query + "')").html($(".re-search-tips li:contains('" + query + "')").html().replace(new RegExp('<span>' + query + '</span>', 'g'), '' + query + ''));
}

  

最新文章

  1. 【C#】透屏幕,屏幕扩展
  2. iOS开发者账号配置进行设备调试
  3. October 4th 2016 Week 41st Tuesday
  4. exerunexplorer.exe
  5. lvs简单配置
  6. 【转】C#路径/文件/目录/I/O常见操作汇总
  7. mysql下命令行执行sql脚本
  8. Windows脚本 - %~dp0的含义
  9. ORACLE 视图的 with check option
  10. [Usaco2008 Feb]Meteor Shower流星雨[BFS]
  11. [转载] java中静态代码块的用法 static用法详解
  12. asp.net core 使用 swagger 生成接口文档
  13. 【一天一道LeetCode】#43. Multiply Strings
  14. 1、自动化运维之SaltStack实践
  15. html5-output的用法
  16. Node 内存控制
  17. Ext.js高级组件
  18. Boxlayout中button改变大小
  19. (转)Unity笔记之编辑器(BeginToggleGroup、BoundsField、ColorField) ...
  20. Linux下指定线程的名字

热门文章

  1. ping-pong buffer
  2. 让sentinel-dashboard支持nacos
  3. Intellij 热部署插件 JRebel [转载]
  4. just the check 买单
  5. Python3.7 - Argparse模块的用法
  6. 存储过程中的BeginEnd
  7. CentOS6.5 更新gcc-7.3.0
  8. Sitecore客户体验成熟度模型之旅
  9. 65 TCP连接中,流的关闭会造成Socket的关闭
  10. 【1】【leetcode-17】电话号码的字母组合