AutoCompleteExtender触发选中事件问题

weixinpeng 2011-02-18 11:50:54
ajaxToolkit:AutoCompleteExtender触发选中事件,目前官方没有可用的对鼠标选中项做事件。请各位大师傅发扬博爱精神。

一起来探讨一下。

需解决的问题如下:

1、对下拉框中的选中的值,一按回车键或者用鼠标选中一个值一点,就能自动关联一个脚本事件。这个

脚本事件就是按照他当前所选中的值进行数据库查询。
...全文
517 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangyihua 2011-04-21
  • 打赏
  • 举报
回复
我又改进了一下,现在完全可以实现你的全部要求了,注意看AutoCompleteExtender控件的事件:OnClientItemOver='ace1_itemOver' , OnClientItemSelected="ace1_itemSelected" ;


<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>客服中心</title>
<meta name="keywords" content="" />
<meta name="description" content="" />
<link href="/style/master.css" rel="stylesheet" type="text/css" />
<script language="javascript" src="/js/common.js" type="text/javascript"></script>

<script language="javascript" type="text/javascript">
function ace1_itemOver(sender, e) {
var ace1value = document.getElementById('<%=txtKey.ClientID %>');
ace1value.value = e.get_text();
}
function ace1_itemSelected(sender, e) {
var bSearch = document.getElementById("<%=ibtnSearch.ClientID %>");
if (null != bSearch) {
bSearch.click();
}
}
function checkForm(e) {
var success = true;
var obj;

obj = document.getElementById("<%=txtKey.ClientID %>");
if (!v_SqlInjection(obj, '*关键字含有非法字符', false))
success = false;

return success;
}

</script>

</head>
<body>
<form id="form1" runat="server" defaultbutton="ibtnSearch">
<asp:TextBox ID="txtKey" runat="server" MaxLength="30" onblur="v_SqlInjection(this,'*关键字含有非法字符',false)"></asp:TextBox>


<asp:ImageButton ID="ibtnSearch" runat="server" ImageUrl="/images/zsk_btn01.jpg" OnClientClick="javascript: if(Page_ClientValidate()) return checkForm(event);" OnClick="ibtnSearch_Click" />


<ajaxToolkit:AutoCompleteExtender ID="ac1" runat="server" TargetControlID="txtKey"
ServicePath="~/WebServices/Service.asmx" ServiceMethod="GetSearchTag" MinimumPrefixLength="1"
CompletionInterval="500" CompletionListCssClass="autocomplete_completionListElement"
CompletionListItemCssClass="autocomplete_listItem" CompletionListHighlightedItemCssClass="autocomplete_highlightedListItem"
ContextKey="0|0|0|4" OnClientItemOver='ace1_itemOver' OnClientItemSelected="ace1_itemSelected" DelimiterCharacters=";, :" >
</ajaxToolkit:AutoCompleteExtender>

</form>
</body>
</html>
liangyihua 2011-04-21
  • 打赏
  • 举报
回复
TextBox 中的 onblur="v_SqlInjection(this,'*关键字含有非法字符',false)" 这个JS方法你可以看情况来写,是用来判断有没有SQL注入嫌疑,你可以选择不用。

而AutoCompleteExtender控件中的 OnClientItemOver='ace1_itemSelected' ,这个ace1_itemSelected()方法是用来按下移键盘箭头时把相应的提示值赋值给TextBox。


function OnTxtKeyDown() {
var ddlG = document.getElementById("<%=ddlGameList.ClientID %>");
var ddlO = document.getElementById("<%=ddlClassOne.ClientID %>");
var ddlT = document.getElementById("<%=ddlClassTwo.ClientID %>");
var acNameClientId = "<%=ac1.ClientID %>";
var acName = $find(acNameClientId);
if (acName != null) {
acName.set_contextKey(ddlG.options[ddlG.selectedIndex].value + "|" + ddlO.options[ddlO.selectedIndex].value + "|" + ddlT.options[ddlT.selectedIndex].value + "|4");
//alert(acName.get_contextKey());
}
这个部份的代码,你可以删除掉,我是用来给AutoCompleteExtender控件设置自定参数用的,你可以不用。

祝你好运!
liangyihua 2011-04-21
  • 打赏
  • 举报
回复
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>测试</title>
<meta name="keywords" content="" />
<meta name="description" content="" />
<link href="/style/master.css" rel="stylesheet" type="text/css" />
<script language="javascript" src="/js/common.js" type="text/javascript"></script>

<script language="javascript" type="text/javascript">
function ace1_itemSelected(sender, e) {
var ace1value = document.getElementById('<%=txtKey.ClientID %>');
ace1value.value = e.get_text();
}
function OnTxtKeyDown() {
var ddlG = document.getElementById("<%=ddlGameList.ClientID %>");
var ddlO = document.getElementById("<%=ddlClassOne.ClientID %>");
var ddlT = document.getElementById("<%=ddlClassTwo.ClientID %>");
var acNameClientId = "<%=ac1.ClientID %>";
var acName = $find(acNameClientId);
if (acName != null) {
acName.set_contextKey(ddlG.options[ddlG.selectedIndex].value + "|" + ddlO.options[ddlO.selectedIndex].value + "|" + ddlT.options[ddlT.selectedIndex].value + "|4");
//alert(acName.get_contextKey());
}
if (event.keyCode == 13 && Page_ClientValidate()) {
if (checkForm(event)) {
var bSearch = document.getElementById("ibtnSearch");
if (null != bSearch) {
bSearch.click();
}
else {
return false;
}
}
else {
return false;
}
}
}

function checkForm(e) {
var success = true;
var obj;

obj = document.getElementById("txtKey");
if (!v_SqlInjection(obj, '*关键字含有非法字符', false))
success = false;

return success;
}

</script>

</head>
<body>
<form id="form1" runat="server" defaultbutton="ibtnSearch">

<asp:TextBox ID="txtKey" runat="server" MaxLength="30" onkeydown="return OnTxtKeyDown();" onblur="v_SqlInjection(this,'*关键字含有非法字符',false)"></asp:TextBox>
<asp:ImageButton ID="ibtnSearch" runat="server" ImageUrl="/images/zsk_btn01.jpg" OnClientClick="javascript: if(Page_ClientValidate()) return checkForm(event);" OnClick="ibtnSearch_Click" />
<ajaxToolkit:AutoCompleteExtender ID="ac1" runat="server" TargetControlID="txtKey"
ServicePath="~/WebServices/Service.asmx" ServiceMethod="GetSearchTag" MinimumPrefixLength="1"
CompletionInterval="500" CompletionListCssClass="autocomplete_completionListElement"
CompletionListItemCssClass="autocomplete_listItem" CompletionListHighlightedItemCssClass="autocomplete_highlightedListItem"
ContextKey="0|0|0|4" OnClientItemOver='ace1_itemSelected' DelimiterCharacters=";, :">
</ajaxToolkit:AutoCompleteExtender>
</form>
</body>
</html>



chen_ya_ping 2011-02-19
  • 打赏
  • 举报
回复
自己写个JS事件来搞定。
子夜__ 2011-02-19
  • 打赏
  • 举报
回复
可不可以选中后 按一下button按钮啊。。?

当然你这种需求也是合理的。。。

找到项目中AjaxControlToolkit/AutoComplete/AutoCompleteBehavior.js , 有一个函数: _setText: function(item){...} , 这就是当用户选择时执行的函数

参考

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧