如何通过单击Enter或鼠标左键来触发dropdownlist的SelectedIndexChanged事件?

时间:2013-04-26 08:22:32

标签: c# asp.net

我在这样的页面上有一个下拉列表;

<asp:DropDownList ID="ddlCities" runat="server" 
AutoPostBack="true" ClientIDMode="Static" 
OnSelectedIndexChanged="ddlCities_SelectedIndexChanged"> 
</asp:DropDownList>

这在正常情况下效果很好。但是由于客户的行为,我必须改变下拉列表的行为。

所以我的意思是,当客户端关注下拉列表并向下移动到其他列表项时,会触发SelectedIndexChanged事件。但我不想要这个。我想,当用户关注下拉列表的元素时,SelectedIndexChanged事件将不会触发,按Enter或鼠标左键事件将仅触发SelectedIndexChanged事件。

有没有办法实现这个目标?

2 个答案:

答案 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