2017-03-25 229 views
0

根據下面的代碼給出一個簡單的自動完成功能,如何避免只有在按下特定按鍵(本例中爲左側和右側箭頭)jQuery自動完成 - 阻止特定按鍵上的呼叫(左右箭頭)

只是要清楚,我想避免的調用是autocomplete一個(返回的自動完成建議列表),而不是在select一個

我相信我需要event.stopPropagation(按here) ,但我不清楚如何限制這個特定的鍵

$("#myAutoComplete").autocomplete({ 
     source: function (request, response) { 
      $.ajax({ 
       type: "POST", 
       contentType: 'application/json', 
       data: some_json_package, 
       success: response, 
       dataType: 'json' 
      }); 
     },   
     minLength: 2, 
     select: autocompleteSelectFunction, 
    });       

編輯:爲了進一步說明這個用例,問題是當用戶用左右箭頭瀏覽編輯自動完成時,組件認爲編輯已經完成並調用自動完成,從而生成一個新列表的建議(等同於以前的,因爲用戶已經inputed沒有新的數據,剛剛搬到左箭頭或右)

回答

1

這是一個有點髒,但這裏有一個可行的解決方案:

https://jsfiddle.net/9sz4pjqc/

它只會在來源時調用按下的最後一個鍵不是左箭頭或右箭頭。我使用默認的jQuery UI Autocomplete示例,因爲JSON當然在JSfiddle中不起作用,但我相信您可以根據自己的情況對此示例進行優化;-)

這個小腳本將保存按下的最後一個鍵一個變量:

$('#myAutoComplete').on("keyup", function(e) { 
    var code = (e.keyCode || e.which); 
    if (code == 37 || code == 39) { 
    arrowKeyPressed = 1; 
    console.log('Left/Right'); 
    } else { 
    arrowKeyPressed = 0; 
    console.log('Not Left/Right'); 
    } 
}); 

而且source這一修改將讓這個源只提供給自動完成,如果最後按下的鍵不是向左或向右的箭頭:

source: function(request, response) { 
    if (arrowKeyPressed == 0) { 
     response(*** YOUR ORIGINAL AJAX/JSON SOURCE HERE ***); 
    } 
    } 

要在信貸的地方給一點信用由於我的解決方案是基於這些geniouses的工作:Show Jquery UI Autocomplete only when a special key is pressed

+0

所以你使用一個全局變量來保持跟蹤,然後在源代碼中檢查它。非常感謝,也歡迎鏈接 – Pythonic

+0

歡迎您:) –