У меня есть текстовое поле, к которому я добавил автозаполнение. Но это проблема, я хочу иметь возможность использовать значение, отличное от объекта, в зависимости от того, введены скобки или нет. Проблема в том, что мне нужно создать что-то вроде State(County)
. Я выбираю штат (эта часть работает нормально), но затем мне нужно выбрать округ после ввода (
, он ничего не делает, нет ошибок или ничего. ![enter image description here](https://i.stack.imgur.com/a4110.jpg)
![enter image description here](https://i.stack.imgur.com/tMBgq.jpg)
Это мой код:
$(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();
});
});
});
Я знаю, что здесь есть некоторые проблемы, например, когда я ввожу название штата, одна и та же запись показана несколько раз, но я разберусь с этим позже, я просто хочу быть уверен, что то, что я пытаюсь сделать, возможно Заранее спасибо.