Ранее отправленный ответ с использованием логического isItemSelected
не будет работать, если пользователь сначала выберет элемент из списка, а затем вернется и решит вместо него ввести значение.
Чтобы предотвратить это, также должно быть событие, которое сбрасывает isItemSelected на false, когда ввод приходит в фокус:
ASPX
<asp:TextBox onblur="checkItemSelected(this)" onfocus="resetItemSelected()"../>
JS
function resetItemSelected() {
isItemSelected = false;
}
Или ...
Используйте событие JS, которое вызывается при выборе, и скопируйте значение из текстового поля в скрытое поле. Затем используйте значение из скрытого поля для обработки.
ASPX
<asp:HiddenField runat="server" ID="hf1"/>
<asp:TextBox runat="server" ID="tb1"></asp:TextBox>
<ajax:AutoCompleteExtender ID="ace1" runat="server" TargetControlID="tb1" OnClientItemSelected="userSelected" .../>
JS
function userSelected(sender, e) {
var selectedItem = e.get_value();
$get("<%= hf1.ClientID%>").value = selectedItem;
return false;
}
Но подождите ... есть еще!
Чтобы улучшить вышесказанное, вы можете добавить событие размытия в текстовое поле, которое проверяет, соответствует ли значение текстового поля значению в скрытом поле, и очищает текстовое поле, если значение не совпадает.
//remove value if not selected from drop down list
$('#<%=tb1.ClientID%>').blur(function () {
if ($('#<%=hf1.ClientID%>').val() !== $(this).val()) {
$(this).val("");
//optionally add a message near the input
}
});
Это сделает очевидным для пользователя, что ввод не принимается.