目前我在做一个类似智能搜索提示的功能,在文本框输入一个关键字后,通过Ajax自动获取与输入关键字类似的数据,并在输入框的下方 利用一个div层显示,我在显示层中是使用table来布局的,一个数据就是一行,一行就一列。现在是希望在焦点在输入框时,按下向下键 焦点能够在第一个td上。
目前在IE下,焦点能够下移,但在FF下就熄火了
大侠们,看到后 尽快帮个忙啊  谢谢——谢谢——.....
代码如下:
$("#inputText").keydown(function(evt) {
evt = (evt) ? evt : ((window.event) ? window.event : "")
keyCode = evt.keyCode ? evt.keyCode : (evt.which ? evt.which :evt.charCode);
if (keyCode == 40) {
row_index = 0;
window.setTimeout( function(){$("tr.showSearchTip").eq(0).css({"cursor" : "pointer","background-color" : #eee"}).children().get(0).focus(); }, 0);
               // 网上Google了下 网友们都说用window.setTimeout方式就可以在ff下获得焦点 可我这不行。。
               // 开始我是用  $("tr.showSearchTip").eq(0).css({"cursor" : "pointer","background-color" : #eee"}).children().focus();
               // 2种方式都不行。。555
}
});

解决方案 »

  1.   

    document.getElementById("ID号").focus();或者某对象.focus();
      

  2.   

    function beKeyUp(e)

    if(e.keyCode!=13&e.keyCode!=9&e.keyCode!=38&e.keyCode!=40)

    objInputValue.val(objInput.val()); zz = -1;
    if ($.trim(objInput.val()).length<D.inputlength) objSuggest.attr("class","suggest_hidden"); 
    if ($.trim(objInput.val()).length>=D.inputlength)

    InputValue = $.trim(objInput.val());
    if (InputValueZZ == ""){
    InputValueZZ = InputValue;
    t=setTimeout(function(){sdd()},400);
    }
    else
    {
    clearTimeout(t);
    if(InputValueZZ == InputValue) return; else t=setTimeout(function(){sdd()},400);
    }


    } function sdd()
    {
    if(InputValueZZ == InputValue)
    {
    if ($.trim(objInput.val()).length>=D.inputlength) getdata(D.inputName,D.url);
    }
    else
    {
    InputValueZZ = InputValue;
    sdd();
    }
    }//远程获取数据
    function getdata(inputName,url)
    {
    var temp = "";
    var result = "";
    var objleft,objright;
    var objload;
    objload = $("<div>正在获取数据</div>")
    objInput.focus();
    objSuggest.html(objIframe);
    objSuggest.append(objload);
    objload.attr("class","loaddata");
    objIframe.css("height",objSuggest.height());
    objInput.attr("class","key_normal");
    objSuggest.attr("class","search_suggest");
    $.ajax({
    type:"post",
    url:D.url,
    dataType:"xml",
    data:D.inputName+"="+escape($.trim(objInput.val())),
    success:function(Back){
    itemLength = $("response",Back).size();
    if(itemLength == 0)
    {
    objIframe.css("height",objSuggest.height());
    objInput.attr("class","key_normal");
    objSuggest.attr("class","suggest_hidden");
    return;
    }
    objSuggest.html(objIframe);
    $("response",Back).each(function(i){
    result = $(this).attr("result");
    if(typeof(result)=="undefined") result="";
    objleft = $("<span></span>");
    objright = $("<span></span>")
    objtemp = $("<div></div>");
    objtemp.append(objleft);
    objtemp.append(objright);
    objtemp.appendTo(objSuggest);

    objleft.text($(this).text());
    objright.text(result);

    objleft.attr("class","suggest_left");
    objright.attr("class","suggest_right");

    objtemp.attr("value",$(this,Back).attr("value"))
       .attr("valuetext",$(this,Back).text())
       .attr("class","item_normal")
       .mouseover(function(){beMouseOver(i)})
       .css("width",sugesstDivWidth)
       .css("overflow","hidden")
       .click(function(){beClick(i)});
    })
    $("<div>取消</div>").click(function(){beClick2()})
    .attr("class","cancel")
    .appendTo(objSuggest);
    //objIframe.css("height",objSuggest.get(0).scrollHeight);
    objInput.attr("class","key_abnormal");
    objSuggest.attr("class","search_suggest");
    objIframe.css("height",objSuggest.get(0).scrollHeight);
    objIframe.css("height",objSuggest.get(0).scrollHeight);
    return;
    },
    error:function(){
    alert("远程获取数据失败!!");
    objInput.attr("class","key_normal");
    objSuggest.attr("class","suggest_hidden");
    return false;
    }
    })
    }//函数鼠标经过效果 
    function beMouseOverEFF(i){$("div",objSuggest).eq(i).attr("class","item_high");} 
    //函数鼠标移开效果 
    function beMouseOutEFF(i){if (i>=0) $("div",objSuggest).eq(i).attr("class","item_normal");} 
    function beMouseOver(i)

    objInput.focus(); 
    beMouseOutEFF(zz); 
    zz=i; 
    beMouseOverEFF(zz); 
    } //函数单击 
    function beClick(i)

    objform.keydown(function(e){return unbindSubmit(e)});
    objInput.val($("div",objSuggest).eq(i).attr("valuetext"));
    objInputValue.val($("div",objSuggest).eq(i).attr("value"));
    if($("div",objSuggest).eq(i).attr("value") == "undefined"){objInputValue.val($("div",objSuggest).eq(i).text())};
    objInput.attr("class","key_normal");
    objSuggest.attr("class","suggest_hidden");
    objInput.focus();
    zz=-1; 
    D.fns();
    //objform.unbind();
    } function unbindSubmit(e)
    {
    if(e.keyCode == 13){return false;}
    }
    //函数单击 
    function beClick2()

    if($.trim(objInput.val()).length<D.inputlength){objInputValue.val("");}
    objInput.attr("class","key_normal");
    objSuggest.attr("class","suggest_hidden");
    zz=-1; 
    } //方向键接收函数 
    function beKeyDown(e){ 
    //往下按 
    if (e.keyCode==40)
    {  if(zz == itemLength -1 ){beMouseOutEFF(zz);zz = -1;};
    if(zz<itemLength-1){beMouseOutEFF(zz++);} ;
    if(zz<itemLength){beMouseOverEFF(zz);} ;

    //往上按 
    if (e.keyCode==38)

    if (zz>0){beMouseOutEFF(zz--);} 
    if (zz>=0){beMouseOverEFF(zz);} 

    //按回车或者TAB 
    if (e.keyCode==13){if (zz!=-1)beClick(zz);} 
    } //当鼠标在该插件其他区域点击时,隐藏该插件提示框
    var _sobj = objdiv.get(0);
    $(document).click(function(e){
    e = e ? e : window.event;
    var tag = e.srcElement || e.target;
    if(_sobj.id==tag.id){return;}
    var _temObj = tag;
    while(_temObj)
    {
    if(_temObj.id=="ffsuggest"+_tem)return;
    _temObj = _temObj.parentNode;
    }
    objInput.attr("class","key_normal");
    objSuggest.attr("class","suggest_hidden");
    });}
      

  3.   

    element.focus(); //element为dom元素
      

  4.   

    谢谢9楼的答复啊
    我也尝试用过jquery对象转化为dom对象.focus()
    还是不行。是不是td 在firefox下是不能focus的啊?
      

  5.   

    粗略地看了一眼,估计问题在:
    FireFox的html标准下,非输入性质的html标签不可编译为能够获取焦点的,例如你用的td还有div等块元素都不可以像IE一样直接获取焦点,你可以用一个div的静态页面试试看,在获取焦点的方法中增加一个alert,IE可以,FF没戏。
    呵呵~
    建议你更改一下获取第一个高亮显示的列项的脚本逻辑,用脚本控制你自定义的option 
      

  6.   

    谢谢 你的提醒
    我再试试看。【FireFox的html标准下,非输入性质的html标签不可编译为能够获取焦点的】呵呵 我现在也都快被这概念征服了 好像是这样
    IE下可以获取的到。
      

  7.   

    不应该,你看看谷歌文档上传的列表框,任何浏览器下皆可聚焦,他用的是span。