Javascript 默认选项卡导航在Mozilla中不起作用
在Mozilla Firefox浏览器中,选项卡按钮的正常导航会被此文本框卡住。按Tab键时,它不会移动到下一个元素。在IE和Chrome中工作良好。有人能帮我修一下吗Javascript 默认选项卡导航在Mozilla中不起作用,javascript,jquery,html,css,Javascript,Jquery,Html,Css,在Mozilla Firefox浏览器中,选项卡按钮的正常导航会被此文本框卡住。按Tab键时,它不会移动到下一个元素。在IE和Chrome中工作良好。有人能帮我修一下吗 <div class="editor-field"> <div> <input id="Rentaljeepshop" class="ui-autocomplete-input" type="text" value="Budget Rent A Car" name="R
<div class="editor-field">
<div>
<input id="Rentaljeepshop" class="ui-autocomplete-input" type="text" value="Budget Rent A Car" name="Rentaljeepshop" maxlength="50" isautocomplete="true" autocomplete="off" role="textbox" aria-autocomplete="list" aria-haspopup="true"></input>
/div>
</div>
/div>
我的Jquery是:
(function( $, undefined ) {
$.widget( "ui.autocomplete", {
options: {
appendTo: "body",
delay: 300,
minLength: 1,
position: {
my: "left top",
at: "left bottom",
collision: "none"
},
source: null
},
_create: function() {
var self = this,
doc = this.element[ 0 ].ownerDocument;
this.element
.addClass( "ui-autocomplete-input" )
.attr( "autocomplete", "off" )
// TODO verify these actually work as intended
.attr({
role: "textbox",
"aria-autocomplete": "list",
"aria-haspopup": "true"
})
.bind( "keydown.autocomplete", function( event ) {
if ( self.options.disabled ) {
return;
}
var keyCode = $.ui.keyCode;
switch( event.keyCode ) {
case keyCode.PAGE_UP:
self._move( "previousPage", event );
break;
case keyCode.PAGE_DOWN:
self._move( "nextPage", event );
break;
case keyCode.UP:
self._move( "previous", event );
// prevent moving cursor to beginning of text field in some browsers
event.preventDefault();
break;
case keyCode.DOWN:
self._move( "next", event );
// prevent moving cursor to end of text field in some browsers
event.preventDefault();
break;
case keyCode.ENTER:
case keyCode.NUMPAD_ENTER:
// when menu is open or has focus
if ( self.menu.element.is( ":visible" ) ) {
event.preventDefault();
}
//passthrough - ENTER and TAB both select the current element
case keyCode.TAB:
if ( !self.menu.active ) {
return;
}
self.menu.select( event );
break;
case keyCode.ESCAPE:
self.element.val( self.term );
self.close( event );
break;
default:
// keypress is triggered before the input value is changed
clearTimeout( self.searching );
self.searching = setTimeout(function() {
// only search if the value has changed
if ( self.term != self.element.val() ) {
self.selectedItem = null;
self.search( null, event );
}
}, self.options.delay );
break;
}
})
.bind( "focus.autocomplete", function() {
if ( self.options.disabled ) {
return;
}
self.selectedItem = null;
self.previous = self.element.val();
})
.bind( "blur.autocomplete", function( event ) {
if ( self.options.disabled ) {
return;
}
clearTimeout( self.searching );
// clicks on the menu (or a button to trigger a search) will cause a blur event
self.closing = setTimeout(function() {
self.close( event );
self._change( event );
}, 150 );
});
this._initSource();
this.response = function() {
return self._response.apply( self, arguments );
};
this.menu.element.hide();this.menu = $( "<ul></ul>" )
.addClass( "ui-autocomplete" )
.appendTo( $( this.options.appendTo || "body", doc )[0] )
// prevent the close-on-blur in case of a "slow" click on the menu (long mousedown)
.mousedown(function( event ) {
// clicking on the scrollbar causes focus to shift to the body
// but we can't detect a mouseup or a click immediately afterward
// so we have to track the next mousedown and close the menu if
// the user clicks somewhere outside of the autocomplete
var menuElement = self.menu.element[ 0 ];
if ( event.target === menuElement ) {
setTimeout(function() {
$( document ).one( 'mousedown', function( event ) {
if ( event.target !== self.element[ 0 ] &&
event.target !== menuElement &&
!$.ui.contains( menuElement, event.target ) ) {
self.close();
}
});
}, 1 );
}
// use another timeout to make sure the blur-event-handler on the input was already triggered
setTimeout(function() {
clearTimeout( self.closing );
}, 13);
})
.menu({
focus: function( event, ui ) {
var item = ui.item.data( "item.autocomplete" );
if ( false !== self._trigger( "focus", null, { item: item } ) ) {
// use value to match what will end up in the input, if it was a key event
if ( /^key/.test(event.originalEvent.type) ) {
self.element.val( item.value );
}
}
},
selected: function( event, ui ) {
var item = ui.item.data( "item.autocomplete" ),
previous = self.previous;
// only trigger when focus was lost (click on menu)
if ( self.element[0] !== doc.activeElement ) {
self.element.focus();
self.previous = previous;
}
if ( false !== self._trigger( "select", event, { item: item } ) ) {
self.element.val( item.value );
}
self.close( event );
self.selectedItem = item;
},
blur: function( event, ui ) {
// don't set the value of the text field if it's already correct
// this prevents moving the cursor unnecessarily
if ( self.menu.element.is(":visible") &&
( self.element.val() !== self.term ) ) {
self.element.val( self.term );
}
}
})
.zIndex( this.element.zIndex() + 1 )
// workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781
.css({ top: 0, left: 0 })
.hide()
.data( "menu" );
if ( $.fn.bgiframe ) {
this.menu.element.bgiframe();
}
},
destroy: function() {
this.element
.removeClass( "ui-autocomplete-input" )
.removeAttr( "autocomplete" )
.removeAttr( "role" )
.removeAttr( "aria-autocomplete" )
.removeAttr( "aria-haspopup" );
this.menu.element.remove();
$.Widget.prototype.destroy.call( this );
},
(函数($,未定义){
$.widget(“ui.autocomplete”{
选项:{
附:“身体”,
延误:300,
最小长度:1,
职位:{
我的:“左上”,
在“左下角”,
碰撞:“无”
},
来源:空
},
_创建:函数(){
var self=这个,
doc=this.element[0]。所有者文档;
这个元素
.addClass(“ui自动完成输入”)
.attr(“自动完成”、“关闭”)
//要验证这些功能是否按预期工作
艾特先生({
角色:“文本框”,
“咏叹调自动完成”:“列表”,
“aria haspopup”:“真”
})
.bind(“keydown.autocomplete”),函数(事件){
如果(self.options.disabled){
返回;
}
var keyCode=$.ui.keyCode;
开关(event.keyCode){
case keyCode.PAGE\u UP:
自我移动(“上一页”,事件);
打破
case keyCode.PAGE_向下:
自我移动(“下一页”,事件);
打破
case keyCode.UP:
自我移动(“先前”,事件);
//在某些浏览器中,防止将光标移动到文本字段的开头
event.preventDefault();
打破
case keyCode.DOWN:
自我移动(“下一步”,事件);
//在某些浏览器中,防止将光标移动到文本字段的末尾
event.preventDefault();
打破
case keyCode.ENTER:
case keyCode.NUMPAD\u输入:
//当菜单打开或有焦点时
if(self.menu.element.is(“:visible”)){
event.preventDefault();
}
//passthrough-ENTER和TAB都选择当前元素
case keyCode.TAB:
如果(!self.menu.active){
返回;
}
self.menu.select(事件);
打破
case keyCode.ESCAPE:
self.element.val(self.term);
自我关闭(事件);
打破
违约:
//更改输入值前会触发按键
clearTimeout(自搜索);
self.search=setTimeout(函数(){
//仅当值已更改时进行搜索
if(self.term!=self.element.val()){
self.selectedItem=null;
self.search(null,事件);
}
},self.options.delay);
打破
}
})
.bind(“focus.autocomplete”,函数(){
如果(self.options.disabled){
返回;
}
self.selectedItem=null;
self.previous=self.element.val();
})
.bind(“blur.autocomplete”,函数(事件){
如果(self.options.disabled){
返回;
}
clearTimeout(自搜索);
//单击菜单(或触发搜索的按钮)将导致模糊事件
self.closing=setTimeout(函数(){
自我关闭(事件);
自我改变(事件);
}, 150 );
});
这个。_initSource();
this.response=函数(){
返回self.\u response.apply(self,arguments);
};
this.menu.element.hide();this.menu=$(“
”)
.addClass(“ui自动完成”)
.appendTo($(this.options.appendTo | | |“body”,doc)[0])
//防止在菜单上出现“慢速”点击时关闭模糊(长鼠标向下)
.mousedown(函数(事件){
//单击滚动条会使焦点转移到主体
//但我们无法立即检测到鼠标移动或点击
//因此,我们必须跟踪下一个鼠标向下移动并关闭菜单(如果需要)
//用户单击自动完成之外的某个位置
var menuElement=self.menu.element[0];
if(event.target==菜单元素){
setTimeout(函数(){
$(文档).1('mousedown',函数(事件){
if(event.target!==self.element[0]&&
event.target!==菜单元素&&
!$.ui.contains(menuElement,event.target)){
self.close();
}
});
}, 1 );
}
//使用另一个超时以确保已触发输入上的模糊事件处理程序
setTimeout(函数(){
clearTimeout(自动关闭);
}, 13);
})
.菜单({
焦点:功能(事件、用户界面){
var item=ui.item.data(“item.autocomplete”);
if(false!==self.\u触发器(“焦点”,null,{item:item})){
//如果是关键事件,则使用值匹配输入中的结果
如果(/^
case keyCode.TAB:
if ( !self.menu.active ) {
return;
}
self.menu.select( event );
break;