我在这样的页面上有一个下拉列表;
<asp:DropDownList ID="ddlCities" runat="server"
AutoPostBack="true" ClientIDMode="Static"
OnSelectedIndexChanged="ddlCities_SelectedIndexChanged">
</asp:DropDownList>
这在正常情况下效果很好。但是由于客户的行为,我必须改变下拉列表的行为。
所以我的意思是,当客户端关注下拉列表并向下移动到其他列表项时,会触发SelectedIndexChanged
事件。但我不想要这个。我想,当用户关注下拉列表的元素时,SelectedIndexChanged
事件将不会触发,按Enter或鼠标左键事件将仅触发SelectedIndexChanged
事件。
有没有办法实现这个目标?
答案 0 :(得分:1)
如果你有jQuery,我认为你可以做这个客户端。 Asp.NET Dropdownlist呈现为HTML选择元素。
尚未对此进行测试,但我认为您可以阻止更改事件中的回发,并在输入键时触发它...
$("#idofselectelement").change(function(e) {
// This stops auto postback, so SelectedIndexChanged does not fire.
e.preventDefault();
});
$("#idofselectelement").keyup(function(e) {
//Check for enter keypress
if ((e.keyCode ? e.keyCode : e.which) == 13){
//Simulate autopostback, this triggers SelectedIndexChanged
__doPostBack('idofselectelement','') });
}
在我看来,有时将这个功能放在js或jQuery代码中要容易得多,因为你可以直接操作控件的行为,而且你不仅限于Asp.NET给你的功能。不知道其他人怎么想这个?
编辑:未经测试,但我认为事件1适用于鼠标右键....
$("#idofselectelement").mousedown(function(event) {
if(event.which == 1) {
//Simulate autopostback, this triggers SelectedIndexChanged
__doPostBack('idofselectelement','')
}
});
答案 1 :(得分:0)
看看关键钩子尝试这样做,这将是你的答案。
http://www.codeproject.com/Articles/19004/A-Simple-C-Global-Low-Level-Keyboard-Hook