jQuery自己写的一个类似google自动提示的插件,源代码奉上

 
  1. jQuery.fn.extend({
  2. jComplete:function(ID,url) { 
  3.     var key="#"+ID;//输入框ID
  4.     var kurl=url;//异步交互URL
  5.     var keword=$(key).get(0).name;//参数名称
  6.     
  7.     $(key).attr('autocomplete','off');//设置浏览器的自动提示关闭
  8.     var $autocomplete=$('<div id=/"smallContent/"></div>').hide().insertAfter(key);
  9.     
  10.     var selectedItem=null;//当前选中项
  11.     var setSelectedItem=function(item){//设置但前选中项setSelectedItem(item)
  12.         selectedItem=item;
  13.         if(selectedItem===null){
  14.             $autocomplete.hide();
  15.             return;
  16.         }
  17.         /*不能循环选择的代码
  18.         if(selectedItem<0){
  19.             selectedItem=0;
  20.         }
  21.         if(selectedItem>=$autocomplete.children().find('li').length){
  22.             selectedItem=$autocomplete.children().find('li').length-1;
  23.         }*/
  24.         if(selectedItem<0){
  25.             selectedItem=$autocomplete.children().find('li').length-1;
  26.         }
  27.         if(selectedItem>=$autocomplete.children().find('li').length){
  28.             selectedItem=0;
  29.         }
  30.         $autocomplete.children().find('li').removeClass('hov').eq(selectedItem).addClass('hov');
  31.         $autocomplete.show();
  32.     }
  33.     
  34.     $(key).keyup(function(event){
  35.     
  36.         event||(event=window.event);//为了兼容浏览器,如果没有这个,只适用于IE
  37.         if(event.keyCode>40||event.keyCode==8||event.keyCode==32||event.keyCode==13){
  38.         /*
  39.         代码为40和以下的键,是特殊键,包括(回车,方向,退出等)
  40.         8为Backspace键
  41.         32为空格[为了适应中文输入法]
  42.         13为回车[为了适应中文输入法]
  43.         */
  44.         if(event.keyCode==13)//回车键
  45.         {
  46.             $(key).val($autocomplete.children().find("li").eq(selectedItem).html());
  47.             $autocomplete.hide();
  48.             $("form").submit(function(){return false});//阻止页面提交
  49.         }
  50.         selectedItem=null;//重置一下选中项,由于它是一个全局变量
  51.         
  52.                 $.ajax({ 
  53.                       type: "GET"
  54.                       url:kurl, 
  55.                       //data:"keyword="+encodeURI($(key).val()), //另一种书写形式
  56.                       data:{keyword:encodeURI($(key).val())},
  57.                       success: function(data){ 
  58.                          if(data!="") { 
  59.                              $autocomplete.empty();
  60.                              var text="<ul>"+data+"</ul>";
  61.                              $autocomplete.html(text);
  62.                              if($autocomplete.children().find('li').length<1)//当没有加载数据的时候隐藏
  63.                              {$autocomplete.hide();}
  64.                              /**/
  65.                              $autocomplete.children().find('li').mouseover(function(){//这里实现的是鼠标选取,与下面的冲突,故把下面的注释掉
  66.                                 setSelectedItem($autocomplete.children().find('li').index(this));
  67.                                 //alert(selectedItem);
  68.                              }).click(function(){//实现鼠标点击,选择自动提示的内容
  69.                                 //$(key).get(0).value = $(this).html();
  70.                                 $(key).val($autocomplete.children().find("li").eq(selectedItem).html());
  71.                                 //$("form").get(0).submit(); //鼠标点击提交页面
  72.                                 $autocomplete.hide();
  73.                                 return
  74.                              }).mouseout(function(){//这里实现鼠标移出,自动提示框
  75.                                 $(this).removeClass("hov");
  76.                              });
  77.                              /**/
  78.                              $autocomplete.show();  
  79.                          }//end if
  80.                          else{
  81.                              $autocomplete.hide();
  82.                          } //end else
  83.                         
  84.                         
  85.                       }//end function(data)
  86.                });//end $.ajax
  87.         }//end if(event.keyCode>40||event.keyCode==8)
  88.         else if(event.keyCode==27){//退出ESC
  89.             $(key).val("");
  90.             $autocomplete.hide();
  91.         }
  92.         else if(event.keyCode==38)//上方向键
  93.         {
  94.                 //alert('你选择了上方向键');
  95.                 if($(key).val()==""){//用于阻止,直接按下方向键,载入原来的数据
  96.                     $autocomplete.empty();
  97.                     $autocomplete.hide();
  98.                 }
  99.                 if($autocomplete.children().find('li').length<1){//如果没有找到li,不显示下面的div
  100.                     $autocomplete.empty();
  101.                     $autocomplete.hide();
  102.                 }
  103.                 else{
  104.                 setSelectedItem(selectedItem-1);
  105.                 $(key).val($autocomplete.children().find("li").eq(selectedItem).html());
  106.                 }
  107.         }
  108.         else if(event.keyCode==40)//下方向键
  109.         {
  110.                 //alert('你选择了下方向键')
  111.                 if($(key).val()==""){//用于阻止,直接按下方向键,载入原来的数据
  112.                     $autocomplete.empty();
  113.                     $autocomplete.hide();
  114.                 }
  115.                 if($autocomplete.children().find('li').length<1){//如果没有找到li,不显示下面的div
  116.                     $autocomplete.empty();
  117.                     $autocomplete.hide();
  118.                 }
  119.                 else{
  120.                     if(selectedItem===null){//如果没有这个判断,而直接写esle里面的语句,那么第一次就按下方向键,会直接选择第二个,我猜是因为null+1=1吧
  121.                         setSelectedItem(0);
  122.                     }else{
  123.                     setSelectedItem(selectedItem+1);
  124.                     }
  125.                     $(key).val($autocomplete.children().find("li").eq(selectedItem).html());
  126.                 }
  127.         }       
  128.     });//end keyup
  129.     
  130.     $(key).blur(function(){//点击一下文档其他地方,取消提示[其实就是鼠标移出,文本框的时候,提示取消]
  131.         if(selectedItem===null){
  132.             $autocomplete.hide();
  133.             return;
  134.         }
  135.         selectedDiv = $autocomplete.children().find(".hov");
  136.         if(selectedDiv.length<1){
  137.               $autocomplete.hide();
  138.               return;
  139.         }
  140.     });//end $(key).blur
  141. }}); //end all
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值