目前我在做一个类似智能搜索提示的功能,在文本框输入一个关键字后,通过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
}
});
目前在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
}
});
{
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");
});}
我也尝试用过jquery对象转化为dom对象.focus()
还是不行。是不是td 在firefox下是不能focus的啊?
FireFox的html标准下,非输入性质的html标签不可编译为能够获取焦点的,例如你用的td还有div等块元素都不可以像IE一样直接获取焦点,你可以用一个div的静态页面试试看,在获取焦点的方法中增加一个alert,IE可以,FF没戏。
呵呵~
建议你更改一下获取第一个高亮显示的列项的脚本逻辑,用脚本控制你自定义的option
我再试试看。【FireFox的html标准下,非输入性质的html标签不可编译为能够获取焦点的】呵呵 我现在也都快被这概念征服了 好像是这样
IE下可以获取的到。