我使用jQuery自动完成插件,并正尝试手动触发基于用户输入某些键的自动完成。 我想自动完成对输入绑定在飞行所以一旦用户进入某个键触发“被搜索的,我现在进入的数据”,这可能是在中间的自动完成可以开始寻找匹配外地的,不一定一开始。
我绑定一个按键事件的输入。 当用户输入特定键,如“=”,我想显示所有阵列中的元素。 当用户接着输入一个字母,将自动完成从所述阵列上的字符相匹配的选项。 这或多或少是试图模仿在Excel中会发生什么,当用户点击等号键,看到可用的功能,除了“=”键不必在输入的第一个元素,它应该自动完成每一次“ =”被按下,每一个选项被选择的时间解绑交流。
var array1 = ['one','two','three'];
$.input1.bind('keypress', function(event) {
var keyCode;
if (event.keyCode > 0) {
keyCode = event.keyCode;
} else if (typeof(event.charCode) != "undefined") {
keyCode = event.charCode;
}
if (String.fromCharCode(keyCode) == '=') {
$.input1.unbind('keypress');
$.input1.autocomplete(array1);
$.input1.blur();
$.input1.focus();
e = $.Event('keydown');
e.which = keyCode;
$.input1.trigger(e);
}
});
即使我得到的自动完成触发,如果用户输入文本之前任何可能匹配,它不会因为以前的文本相匹配。 因此,如果用户输入“ABD =”自动完成越来越“ABB =”为Q参数,而不只是“=”。
任何帮助非常感谢,我太坚持!
你真正需要的是能够自动完成插件不搜索前过滤字段的值。 纵观插件它看起来不像是内置的。但是,这并不从加它阻止我们。
打开插件代码,并找到函数最后字(),看看行261然后将其添加到该函数:
if ( options.formatValue ){
value = options.formatValue(value);
}
所以最后字功能应该是这样的:
function lastWord(value) {
if ( options.formatValue ){
value = options.formatValue(value);
}
if ( !options.multiple )
return value;
var words = trimWords(value);
return words[words.length - 1];
}
然后在你的jQuery代码,你可以这样做:
$(document).ready(function(){
var array1 = ['one','two','three'];
$('#test').autocomplete(array1,{
formatValue: function(value){
if (value.search('=') == -1) return '';
return value.substring(value.search('=')+1);
}
});
});
这将让你过滤和搜索之前格式化字段的值。 既然你只希望做搜索如果值中有“=”号字符,你寻找它,如果它没有找到你返回一个空字符串。 如果它发现你之前删除它,一切都和什么回报用户后,键入英寸
您可以通过添加代码的第二行修改autocomplete.js
...
.bind( "keydown.autocomplete", function( event ) {
+ self.options.keydownEvent=event;
if ( self.options.disabled ) {...
然后,你指的keydownEvent你这样SORCE函数内
source:function(){
var event=this.options.keydownEvent;
... //Handling the event
请记住,VAR事件有哪些字段。 例如,如果event.which是13,则Enter键被按下。 希望能帮助到你。