zoukankan      html  css  js  c++  java
  • 仿百度下拉框ajax

    原文链接:

    http://www.cnblogs.com/luckyadam/archive/2011/06/29/2093477.html

    我自己的使用环境:vs2010+MVC4+easyui

    流程:

    1.先在form中加入一个div,例如<div id="tagDiv" tabindex="0"></div>

    //tabindex="0" 使其可以使用blur()

    参考:从浏览器的focus blur说起

    http://www.cnblogs.com/_franky/archive/2010/04/28/1722592.html

    还有一个文本框:

    @Html.TextBox("newTag", null, new { style = "border: 1px solid #555;height: 20px;", autocomplete ="off"})

    2.弄一个隐藏域的URL,这步可以不用写,直接在post里面写url也可以。

    例如@Html.Hidden("getUrl", Url.Action("GetList"))

    3.js:

    //先定义:

     var $resultDiv = $('<div id="resultDiv" class="pa f12 ff"></div>');
        var $resultUl = $('<ul id="resultUl"></ul>');
        var $resultLi = [];
        var currentTxt;

     $(function () {//页面加载完后加载

       $("#newTag").keyup(function (e) {
                 if (e.keyCode != 40 && e.keyCode != 38) {//最好加上37、39(左右)
                     currentTxt = $("#newTag").val();
                     pinyinOption();
                 }
             }).focus(function () {
                 this.select();
             });

       function pinyinOption() {
                 $.post('@Url.Action("GetTags")',{ pinyins: $("#newTag").val() }, pinyinCallback, 'json');
           }

      function pinyinCallback(data) {
             $("#resultDiv").show();
             $resultUl.html("");
             for (var i = 0; data[i]; i++) {
                 $resultLi[i] = $("<li></li>");
                 $resultLi[i].html(data[i]);
                 $resultUl.append($resultLi[i]);
             }

       if ($resultUl.html() == "") {
                 $("#resultDiv").hide();
             }
             $resultUl.appendTo($resultDiv);
             $resultDiv.appendTo($("#tagDiv"));
             $("#resultDiv li").hover(function () {
                 $(this).addClass("esultDivLiHover");
             }, function () {
                 $(this).removeClass("esultDivLiHover");
             });
             $("#tagDiv").blur(function () {
                 $("#resultDiv").hide();//离开隐藏div
             });
             $("#resultDiv li").click(function (event) {
                 $("#newTag").val($(this).text());
                 //$("form").submit();

        $("#resultDiv").hide();//点击选择之后就隐藏,上面的blur我使用了没有用,弄不懂
             });
             //键盘上下键控制
             var index = -1;    //标记上下键时所处位置
     
             document.documentElement.onkeydown = function (e) {
                 e = window.event || e;
                 if (e.keyCode == 40) {  //下键操作
                     if (++index == $("#resultDiv li").length) {  //判断加一操作后index值是否超出列表数目界限
                         index = -1;             //超出的话就将index值变为初始值
                         $("#newTag").val(currentTxt);    //并将文本框中值设为用户用于搜索的值
                         $("#resultDiv li").removeClass("esultDivLiHover");
                     }
                     else {
                         $("#newTag").val($($("#resultDiv li")[index]).text());
                         $($("#resultDiv li")[index]).siblings().removeClass("esultDivLiHover").end().addClass("esultDivLiHover");
                     }
                 }
                 if (e.keyCode == 38) {  //上键操作
                     if (--index == -1) {    //判断自减一后是否已移到文本框
                         $("#newTag").val(currentTxt);
                         $("#resultDiv li").removeClass("esultDivLiHover");
                     }
                     else if (index == -2) {     //判断index值是否超出列表数目界限
                         index = $("#resultDiv li").length - 1;
                         $("#newTag").val($($("#resultDiv li")[index]).text());
                         $($("#resultDiv li")[index]).siblings().removeClass("esultDivLiHover").end().addClass("esultDivLiHover");
                     }
                     else {
                         $("#newTag").val($($("#resultDiv li")[index]).text());
                         $($("#resultDiv li")[index]).siblings().removeClass("esultDivLiHover").end().addClass("esultDivLiHover");
                     }
                 }
             };
         }

    }
     

    4.关于controller怎么获取数据就不说了,下面讲下css。

    关键点:通过"position:absolute;  z-index: 100;"样式来使得div浮在上层

    #resultDiv
      {
         left: 47px;
         border: 1px solid #000;
         background: #fff;
         z-index: 100;

     position:absolute;
         200px;
         
      }
     #resultDiv li
      {
         cursor: default;
         padding: 2px 4px;
      }
     .esultDivLiHover
      {
         background: #cfcfcf;
      }


    隐藏div问题

    1.离开div范围隐藏

       $("#tagDiv").mouseleave(function () {//离开
                          $("#resultDiv").hide();
               });

         mouseenter和mouseleave,这两个函数是jquery封装的函数, 可以监控鼠标移近和移出指定的div

        $("#tagDiv").live("mouseenter",function(){
               //处理流程
          });
          $("#tagDiv").live("mouseleave",function(){
              //处理流程
          });

    2.点击页面隐藏div

    $(document).click(function () {
                          $("#resultDiv").hide();
                      });

    存在问题:如果点击文本框,div也隐藏

    解决:

    $("#newTag").click(function (e) {
                e.stopPropagation();//阻止事件冒泡
    });

      

  • 相关阅读:
    keepass
    gpg
    Wireshark实践
    ssh
    namp
    第十二周
    第十一周
    第十周总结
    第九周学习总结
    编程语言
  • 原文地址:https://www.cnblogs.com/xcsn/p/2892666.html
Copyright © 2011-2022 走看看