Javascript jQuery自动完成,根据输入的字符不同源
我在文本框中添加了自动完成功能。但这就是问题所在,我希望能够根据是否输入括号使用与对象不同的值。问题是我需要创建类似于Javascript jQuery自动完成,根据输入的字符不同源,javascript,jquery,autocomplete,Javascript,Jquery,Autocomplete,我在文本框中添加了自动完成功能。但这就是问题所在,我希望能够根据是否输入括号使用与对象不同的值。问题是我需要创建类似于州(县)的内容。我选择州(这部分工作正常),但在输入(后,我需要选择县,它不做任何事情,没有错误或什么都没有 这是我的代码: $(function() { $("document").ready(function() { var states = [ { 'state': "New York", 'county': '1' },
州(县)
的内容。我选择州(这部分工作正常),但在输入(
后,我需要选择县,它不做任何事情,没有错误或什么都没有
这是我的代码:
$(function() {
$("document").ready(function() {
var states = [
{ 'state': "New York", 'county': '1' },
{ 'state': "New York", 'county': '1a' },
{ 'state': "New York", 'county': '1b' },
{ 'state': "Florida", 'county': '2' },
{ 'state': "Florida", 'county': '2a' },
{ 'state': "Florida", 'county': '2b' },
{ 'state': "Florida", 'county': '3' },
{ 'state': "Alaska", 'county': '4' },
{ 'state': "Alaska", 'county': '5' },
{ 'state': "Hawaii", 'county': '6' },
{ 'state': "Hawaii", 'county': '7' },
{ 'state': "Maine", 'county': '8' },
{ 'state': "Maine", 'county': '9' },
{ 'state': "Maine", 'county': '10' }
];
function split(val) {
return val.split(/,\s*/);
}
function extractLast(term) {
return split(term).pop();
}
$('#text').on('keypress', function(e) {
theKeyCode = e.which;
// if (e.which !== 40) { // I tried this too ------------
if (String.fromCharCode(e.which) !== '(') { // Just trying something different
$(e.target)
.autocomplete({
minLength: 0,
autoFocus: true,
source: function(request, response) {
var lastEntry = extractLast(request.term);
var filteredArray = $.map(states, function(item) {
if (item.state.indexOf(lastEntry) === 0) {
return item.state;
} else {
return null;
}
});
response($.ui.autocomplete.filter(filteredArray, lastEntry));
},
focus: function() {
return false;
},
select: function(event, ui) {
var terms = split(this.value);
terms.pop();
terms.push(ui.item.value);
terms.push("");
this.value = terms.join("");
return false;
}
}).on("keydown", function(event) {
if (event.keyCode === $.ui.keyCode.TAB /** && $(this).data("ui-autocomplete").menu.active **/ ) {
event.preventDefault();
return;
}
var newY = $(this).textareaHelper('caretPos').top + (parseInt($(this).css('font-size'), 10) * 1.5);
var newX = $(this).textareaHelper('caretPos').left;
var posString = "left+" + newX + "px top+" + newY + "px";
$(this).autocomplete("option", "position", {
my: "left top",
at: posString
});
});
} else {
console.log(e.which); //This shows the right e.which
$('#text').autocomplete("destroy"); // Just experimenting. It doesn't work with or without it
$(e.target)
.autocomplete({
minLength: 0,
autoFocus: true,
source: function(request, response) {
var lastEntry = extractLast(request.term);
var filteredArray = $.map(states, function(item) {
if (item.county.indexOf(lastEntry) === 0) {
return item.county;
} else {
return null;
}
});
response($.ui.autocomplete.filter(filteredArray, lastEntry));
},
focus: function() {
return false;
},
select: function(event, ui) {
var terms = split(this.value);
terms.pop();
terms.push(ui.item.value);
terms.push("");
this.value = terms.join("), ");
return false;
}
}).on("keydown", function(event) {
if (event.keyCode === $.ui.keyCode.TAB) {
event.preventDefault();
return;
}
var newY = $(this).textareaHelper('caretPos').top + (parseInt($(this).css('font-size'), 10) * 1.5);
var newX = $(this).textareaHelper('caretPos').left;
var posString = "left+" + newX + "px top+" + newY + "px";
$(this).autocomplete("option", "position", {
my: "left top",
at: posString
});
});
} //e.preventDefault();
});
});
});
我知道这里有一些问题,比如当我输入州名时,同一个条目显示了好几次,但我稍后会处理,我只是想确定我正在尝试做的是可能的。提前感谢。这似乎有效:非常整洁,非常接近,但似乎只起作用一次。将在同样的文本框。我应该在我的第一个问题上提到。谢谢。