2011-04-01 37 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; 
}, 

你仍然可以按住「進入」關閉表現,所以覺得免費的,如果必要的,也是打破那裏。我認爲問題出在

this._clickHandler({ target: event.target }, event.target); 

但我在第一次通讀時沒有看到它。這個編輯適合我。

希望幫助

+0

我工作的一個類似的問題(手風琴頭的內聯編輯 - 空格鍵是行爲古怪) - 我發現,在最近的版本jQueryUI的的點擊處理方法已被刪除,取而代之的:this._eventHandler (事件); – 2013-12-28 11:16:19

6

,如果你不需要「_keydown」功能在所有的,我想你可以刪除它。

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

希望幫助

delete($.ui.accordion.prototype._keydown); 
如果您想更改或覆蓋「_keydown」功能 的功能,不希望將其攻入的原始文件,你可以做

+0

覆蓋效果很好。你不想完全刪除keydown,因爲uicode仍然會觸發並且會引發錯誤。簡單地「返回」;從_keydown函數繞過 – muck41 2012-08-20 17:12:13

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); 
};