2011-04-01 17 views

cevap

1

Bir çalışma çözümü buldum, ancak sonuçlardan emin değilim. jquery.ui.accordion.js ise

:

_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; 
}, 

Bildirim girmek için uzaydan "suya düşmek".

_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; 
}, 

Hala "enter" tuşuna basarak kapanış davranış olsun, yani gerekli yanı ise orada kırmak için çekinmeyin: Ben bir ara ekledi. Sorunun

'da olduğunu düşünüyorum, ancak ilk okuduğumda görmedim. Bu düzenleme benim için çalışıyor. Eğer hiç "_keydown" işlevini gerekmiyorsa

+0

Ben jQueryUI daha yeni sürümlerinde tıklama işleyicisi yöntemi kaldırılmıştır ve değiştirilir bulundu: this._eventHandler (Etkinlik); –

6

yardımcı

Umut, ben sadece bunu silebilirsiniz sanırım.

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

değiştirmek veya "_keydown" fonksiyonu işlevselliğini geçersiz kılmak istiyorsanız ve yapabileceği özgün dosyaya kesmek istemiyorsanız eğer:

yardımcı

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

umut

+0

Geçersiz kılma gayet iyi çalışıyor. Uicode hala tetiklediğinden ve bir hata vereceğinden, anahtarı tamamen silmek istemezsiniz. Basitçe "geri dönüş"; _keydown işlevinden baypassa kadar – muck41

3

Sadece boşluk çubuğunu etkinleştirmek için bir yanıt geliştirdim, ancak geçersiz kılmak istediğiniz diğer anahtar olayları için genişletilebilir. Ben benzer bir sorun (- boşluk tuhaf davranıyordu akordeon başlığının yerinde düzenleme) - üzerinde çalışıyordu

/* 
* 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); 
}; 
İlgili konular