2011-04-01 3 views

답변

1

작동하는 해결책을 찾았지만 결과가 확실하지 않습니다. 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"기능이 필요하지 않은 경우

+0

내가 JqueryUI의 최신 버전의 클릭 핸들러 메소드가 제거되었습니다 및 교체 발견 : this._eventHandler (행사); –

6

을하는 데 도움이

희망, 나는 당신이 단지 그것을 삭제할 수 있습니다 같아요.

delete($.ui.accordion.prototype._keydown); 

변경하거나 "_keydown"기능 의 기능을 대체하려면 당신이 할 수있는 원본 파일에 해킹하지 않으려면 :

을하는 데 도움이

$.ui.accordion.prototype._keydown = function(event) { 
    // your new code for the "_keydown" function 
}; 

희망을

+0

재정의가 제대로 작동합니다. uicode가 여전히 실행되고 오류를 발생시키기 때문에 keydown을 완전히 삭제하고 싶지는 않습니다. 간단히 "반환;" _keydown 함수에서 바이 패스로 – muck41

3

스페이스 바를 활성화하는 것에 대한 답을 만들었지 만, 무시하려는 다른 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); 
}; 
관련 문제