jQuery UI accordian에서 스페이스 바를 사용하여 활성 헤더를 전환 할 수 있습니다. 어떻게 이것을 비활성화 할 수 있습니까? 나는 사용자가 아코디언과 상호 작용하기 위해 키보드를 사용하는 것을 원하지 않는다.스페이스 바를 사용하여 jQuery UI Accordion을 사용하지 않도록 설정
답변
작동하는 해결책을 찾았지만 결과가 확실하지 않습니다. 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;
},
당신은 아직도 "enter"누르기에 닫는 행동을 얻는다, 그래서 필요하다면 또한 거기 휴식 할 수있다. 나는 문제가 있다고 생각한다.
this._clickHandler({ target: event.target }, event.target);
그러나 나는 처음 읽었을 때 그것을 보지 못했다. 이 편집은 저에게 효과적입니다. 당신은 전혀 "_keydown"기능이 필요하지 않은 경우
을하는 데 도움이
희망, 나는 당신이 단지 그것을 삭제할 수 있습니다 같아요.
delete($.ui.accordion.prototype._keydown);
변경하거나 "_keydown"기능 의 기능을 대체하려면 당신이 할 수있는 원본 파일에 해킹하지 않으려면 :
을하는 데 도움이$.ui.accordion.prototype._keydown = function(event) {
// your new code for the "_keydown" function
};
희망을
재정의가 제대로 작동합니다. uicode가 여전히 실행되고 오류를 발생시키기 때문에 keydown을 완전히 삭제하고 싶지는 않습니다. 간단히 "반환;" _keydown 함수에서 바이 패스로 – muck41
스페이스 바를 활성화하는 것에 대한 답을 만들었지 만, 무시하려는 다른 keydown 이벤트에 대해서도 확장 할 수 있습니다. 나는 비슷한 문제 (- 스페이스 바를 이상한 행동을했다 아코디언 헤더의 인라인 편집) - 작업했다
/*
* 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);
};
내가 JqueryUI의 최신 버전의 클릭 핸들러 메소드가 제거되었습니다 및 교체 발견 : this._eventHandler (행사); –