2017-03-25 186 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

欢迎您:) –