日期:2014-05-16  浏览次数:20348 次

JS+JQuery模仿百度下拉效果,Opera方向键向下问题。。。。。。。
先看看代码吧,基本效果已经实现。
但是在Opera中当输入值后,按方向键控制选择,向下没得效果,向上可以。。。。
其它浏览器没得问题。。


  $("#" + inputDataTextId).keyup(function(event){

});

这个方法好像向下的时候根本就不执行。。。
请高人指点下。。。。

body {
    background-color: #F8F8FF;
}

#main {
    position: absolute;
    top: 100px;
    left: 36%;
    width: 400px;
    background-color: #F5FFFA;
}

#input_text {
    position: absolute;
    font-size: 18px;
    width: 390px;
    height: 23px;
    border: 1px solid #C9C9C9;
}

#input_div {
    position: absolute;
    width: 392px;
    top: 26px;
    border: 1px solid #454545;
    display: none;
    overflow: hidden;
}

#input_div {
    text-decoration: none;
    background-color: #FFFAFA;
}

#input_div div {
    vertical-align: middle;
    padding: 4px;
    font-weight: bold;
    color: #000000;
    width: 100%;
}

.div_item_select {
    background-color: #E0EEEE;
    height: 22px;
    font-size: 18px;
}

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Demo</title>
        <script type="text/javascript" src="jquery-1.4.2.js">
        </script>
    
    </head>
    <body>
        <div id="main">
            <input type="text" id="input_text">
            <div id="input_div">
            </div>
        </div>
    </body>
</html>



$(document).ready(function(){
  /**
   * 当鼠标 放上去 的效果 CSS  Class名称
   */
var divItemSelect = 'div_item_select';
/**
* 展示数据 的DIV
*/
  var showDataDivId = "input_div";
/**
* 输入框
*/
  var inputDataTextId = "input_text";
/**
* 点击
* @param {Object} event 
*/
  $(document).click(function(event){
      if (event.target.id != inputDataTextId) {
$("#" + showDataDivId).slideUp(200);
      }
  });
/**
* 鼠标在文本框输入值
* @param {Object} event
*/
  $("#" + inputDataTextId).keyup(function(event){
      if (event.keyCode == 40) {//down
          chageSelect(1);
      }
      else  if (event.keyCode == 38) {//up
          chageSelect(-1);
      }
      else  if (event.keyCode == 13) {//回车
          item_click($("#" + showDataDivId + " div[class='" + divItemSelect + "']"));
      }
      else   if (this.value.length > 0) {
          //..ajax请求, 返回的时候 调用。。
          //以下为 Ajax 返回的时候 调用的数据
          var len = 10 - this.value.length;
          if (len < 1) {
              len = 5;
          }
          var str = "";
          for (var i = 0; i < len; i++) {
              var index = i;//此处 为展示顺序,必须要
              //此处拼接服务器返回的数据。。。。
              str += "<div>" + this.value + index + "</div>" + //展示的数据
              "<input type='hidden' name='d_index' value='" +
              index +
              "' />" //位置,勿动
            //+ "<input type='hidden' name='d_value' value='" +index +"' />"; //用于放置数据
          }
          //展示层,并展示数据
          $("#" + showDataDivId).html(str).slideDown(200);
          //注册事件
          registerInputEvent();
      }
      else {
          $("#" + showDataDivId).slideUp(200);
      }
  });
//.blur(function(){$("#" + showDataDivId).slideUp(200);});
/**
* 键盘操作  向上 或向上 
* @param {Object} opt   向上 -1  向下 1 
*/
  function chageSelect(opt){
      if ($("#input_div").css('display') == 'block') {
          var obj = $("#input_div div[class='" + divItemSelect + "']");
          if (obj.html() == null) {//当前还未选中。
              if (opt == 1) {
                  $("#" + showDataDivId + " div:first").addClass(divItemSelect);
              }
              else {
                  $("#" + showDataDivId + " div:last").addClass(divItemSelect);
              }
          }
          else {