Я вижу, что в аккордеоне пользовательского интерфейса jQuery вы можете использовать пробел для переключения активных заголовков. Как это можно отключить? Я не хочу, чтобы пользователь использовал клавиатуру для взаимодействия с аккордеоном.
Отключение jQuery UI Accordion с переключением пробела
Ответы (3)
если вам вообще не нужна функция "_keydown", я думаю, вы можете просто удалить ее.
delete($.ui.accordion.prototype._keydown);
если вы хотите изменить или переопределить функциональность функции «_keydown» и не хотите взломать исходный файл, вы можете сделать это:
$.ui.accordion.prototype._keydown = function( event ) {
// your new code for the "_keydown" function
};
надеюсь, это поможет
Я разработал ответ, чтобы просто включить пробел, но его можно расширить для других событий нажатия клавиш, которые вы хотите переопределить.
/*
* Detect spacebar and return immediately, otherwise call standard behaviour
* The 'solution' of deleting the event handler caused other errors
* http://stackoverflow.com/a/7008791
*/
$.ui.accordion.prototype._originalKeyDown = $.ui.accordion.prototype._keydown;
$.ui.accordion.prototype._keydown = function( event ) {
var keyCode = $.ui.keyCode;
if (event.keyCode == keyCode.SPACE) {
return;
}
// call the original method
this._originalKeyDown(event);
};
Я нашел рабочее решение, но я не уверен в последствиях.
В jquery.ui.accordion.js:
_keydown: function( event ) {
if ( this.options.disabled || event.altKey || event.ctrlKey ) {
return;
}
var keyCode = $.ui.keyCode,
length = this.headers.length,
currentIndex = this.headers.index( event.target ),
toFocus = false;
switch ( event.keyCode ) {
case keyCode.RIGHT:
case keyCode.DOWN:
toFocus = this.headers[ ( currentIndex + 1 ) % length ];
break;
case keyCode.LEFT:
case keyCode.UP:
toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
break;
case keyCode.SPACE:
case keyCode.ENTER:
this._clickHandler( { target: event.target }, event.target );
event.preventDefault();
}
if ( toFocus ) {
$( event.target ).attr( "tabIndex", -1 );
$( toFocus ).attr( "tabIndex", 0 );
toFocus.focus();
return false;
}
return true;
},
Обратите внимание на «провал» от места к входу. Я добавил перерыв:
_keydown: function( event ) {
if ( this.options.disabled || event.altKey || event.ctrlKey ) {
return;
}
var keyCode = $.ui.keyCode,
length = this.headers.length,
currentIndex = this.headers.index( event.target ),
toFocus = false;
switch ( event.keyCode ) {
case keyCode.RIGHT:
case keyCode.DOWN:
toFocus = this.headers[ ( currentIndex + 1 ) % length ];
break;
case keyCode.LEFT:
case keyCode.UP:
toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
break;
case keyCode.SPACE:
break;
case keyCode.ENTER:
this._clickHandler( { target: event.target }, event.target );
event.preventDefault();
}
if ( toFocus ) {
$( event.target ).attr( "tabIndex", -1 );
$( toFocus ).attr( "tabIndex", 0 );
toFocus.focus();
return false;
}
return true;
},
Вы по-прежнему получаете поведение закрытия при нажатии «ввода», поэтому не стесняйтесь прерывать его, если это необходимо. думаю проблема в
this._clickHandler( { target: event.target }, event.target );
но я не увидел его при первом прочтении. Это редактирование работает для меня.
надеюсь, это поможет