2012-08-16 63 views
1

我有一個在slickGrid自動完成文本框的編輯器。 這看起來(簡體)是這樣的:在slickGrid中的jQuery自動完成setWidth的建議

function AutoCompleteEditor(args) { 
var $input; 

this.init = function() { 
    $input = $("<INPUT id='tags' class='editor-text' />"); 
    $input.appendTo(args.container); 
    $input.bind("keydown.nav", function (e) { 
     if (e.which === $.ui.keyCode.LEFT || e.which === $.ui.keyCode.RIGHT) { 
      e.stopImmediatePropagation(); 
     } 
     if((e.which === $.ui.keyCode.DOWN) || (e.which === $.ui.keyCode.UP)){ 
      e.stopImmediatePropagation(); 
     } 
     if(e.which === $.ui.keyCode.RETURN){ 
      e.stopImmediatePropagation(); 
     } 
     }) 
    $input.focus().select(); 

    $input.autocomplete({ 
    minLength: 2, 
    autoFocus: true, 
    source: function(request, response) { 
       ..... 
      }, 
     focus: function(event, ui) { 
      return false; 
     }, 
     select: function(event, ui) { 
      event.target.value = ui.item.label; 
      return false; 
     }, 
     open: function(event, ui) { 
      $(this).autocomplete("widget") 
      .find("ui-menu-item-alternate") 
       .removeClass("ui-menu-item-alternate") 
      .end() 
      .find("li.ui-menu-item:odd a") 
       .addClass("ui-menu-item-alternate"); 
     }, 
     appendTo: args.container, 
     width: 500, 
    }); 

}; 

現在,我有2個問題:

1)建議名單只是比編輯欄中有點窄。但我希望它甚至更寬 - 可能與其中最寬的項目一樣寬

2)我禁用了輸入字段的向上和向下箭頭鍵,但它沒有關注列表,以便箭頭可以選擇建議項目。

任何想法我的代碼有什麼問題?

感謝所有幫助

回答

0

來回答第一個問題。

你可以改變自動完成類

<style type="text/css"> 
.ui-autocomplete { 
    max-height: 250px; 
    max-width: 200px; 
    overflow-y: auto; 
    /* prevent horizontal scrollbar */ 
    overflow-x: hidden; 

} 
/* IE 6 doesn't support max-height 
* we use height instead, but this forces the menu to always be this tall 
*/ 
* html .ui-autocomplete 
{ 
    height: 250px; 
    width: 200px; 
} 
0
//Please find below code make it up and down event null 
$.widget("ui.autocomplete", { 
options: { 
    appendTo: "body", 
    autoFocus: false, 
    delay: 300, 
    minLength: 1, 
    position: { 
     my: "left top", 
     at: "left bottom", 
     collision: "none" 
    }, 
    source: null 
}, 

pending: 0, 

_create: function() { 
    var self = this, 
     doc = this.element[ 0 ].ownerDocument, 
     suppressKeyPress; 
    this.isMultiLine = this.element.is("textarea"); 

    this.element 
     .addClass("ui-autocomplete-input") 
     .attr("autocomplete", "off") 
     // TODO verify these actually work as intended 
     .attr({ 
      role: "textbox", 
      "aria-autocomplete": "list", 
      "aria-haspopup": "true" 
     }) 
     .bind("keydown.autocomplete", function(event) { 
if (self.options.disabled || self.element.propAttr("readOnly")) { 
       return; 
      } 

      suppressKeyPress = false; 
      var keyCode = $.ui.keyCode; 
      switch(event.keyCode) { 
      case keyCode.PAGE_UP: 
       //self._move("previousPage", event); 
       break; 
      case keyCode.PAGE_DOWN: 
       //self._move("nextPage", event); 
       break; 
      case keyCode.UP: 
       //self._keyEvent("previous", event); 
       break; 
      case keyCode.DOWN: 
       //self._keyEvent("next", event); 
       break; 
      case keyCode.ENTER: 
      case keyCode.NUMPAD_ENTER: 
       // when menu is open and has focus 
       if (self.menu.active) { 
        // #6055 - Opera still allows the keypress to occur 
        // which causes forms to submit 
        suppressKeyPress = true; 
        event.preventDefault(); 
       } 
       //passthrough - ENTER and TAB both select the current element 
      case keyCode.TAB: 
       if (!self.menu.active) { 
        return; 
       } 
       self.menu.select(event); 
       break; 
      case keyCode.ESCAPE: 
       self.element.val(self.term); 
       self.close(event); 
       break; 
       // changes done by justin close the menu if text is empty 
       case keyCode.BACKSPACE:     
       break; 
       //****************end ******************* 
      default: 
       // keypress is triggered before the input value is changed 
       clearTimeout(self.searching); 
       self.searching = setTimeout(function() { 
        // only search if the value has changed 
        //if (self.term != self.element.val()) { 
         self.selectedItem = null; 
         self.search(null, event); 
        //} 
       }, self.options.delay); 
       break; 
      } 
     }) 
+0

對不起的CSS,我無法重現你在這裏做什麼。 顯然,您正在捕捉菜單中的按鍵。但我認爲我的焦點停留在編輯字段中(這可能是對的,因爲我可能要重新鍵入)。 我需要趕上編輯框(我這樣做)的上下箭頭鍵,並選擇下一個或上一個建議。爲此,我找不到功能 – user1596343 2012-08-17 09:48:15