有人知道如何使用AutoCompleteExtender(来自AJAX Control Toolkit)阻止用户输入任何不属于建议值的内容吗?
答案 0 :(得分:1)
首先,检查是否要使用新的AjaxToolKit ComboBox。
如果你不能(例如,如果你使用的是.NET Framework 2.0),你可以操纵自动完成功能来满足你的需求,但这很令人头疼,而不是真正的控制权。
检查应该在javascript中进行,你添加一个事件来捕获OnItemSelected。
然后创建一个函数:
function OnItemSelected(sender,e)
{
- 在此验证
}
另一个选择是要求用户通过操作事件从列表中选择值:
onchange,onclick&的onblur。但要找到合适的组合需要一些时间。
为了提升你的精神,我会告诉你这是可能的(我们已经完成了,但由于版权问题,我无法附上我们的代码)。
答案 1 :(得分:1)
这样的事可以帮到你
的Javascript
<script type="text/javascript">
var isItemSelected = false;
//Handler for AutoCompleter OnClientItemSelected event
function onItemSelected() {
isItemSelected = true;
}
//Handler for textbox blur event
function checkItemSelected(txtInput) {
if (!isItemSelected) {
alert("Only choose items from the list");
txtInput.focus();
}
}
</script>
ASPX
<asp:Button onblur="checkItemSelected(this)" ../>
<ajax:AutoCompleteExtender OnClientItemSelected="onItemSelected" ../>
答案 2 :(得分:0)
如果用户最初从列表中选择一个项目,然后返回并决定改为键入值,则使用布尔值isItemSelected
的先前提交的答案将无法工作。
为了防止这种情况,当输入聚焦时,还应该有一个事件将isItemSelected重置为false:
<强> ASPX 强>
<asp:TextBox onblur="checkItemSelected(this)" onfocus="resetItemSelected()"../>
<强> JS 强>
function resetItemSelected() {
isItemSelected = false;
}
使用在select上触发的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
}
});
这将使用户明白不接受输入。