如何触发下拉列表's SelectedIndexChanged事件,点击enter或鼠标左键

本文关键字:enter 点击 鼠标 事件 SelectedIndexChanged 下拉列表 何触发 | 更新日期: 2023-09-27 18:10:55

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

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

这在正常情况下工作得很好。但是由于客户的行为,我不得不改变下拉列表的行为。

所以我的意思是,当客户端关注下拉列表并向下移动到其他列表项时,SelectedIndexChanged事件被触发。但我不想这样。我想,当用户聚焦下拉列表中的一个元素时,SelectedIndexChanged事件将不会被触发,而按回车键或鼠标左键事件将只触发SelectedIndexChanged事件。

有办法做到这一点吗?

如何触发下拉列表's SelectedIndexChanged事件,点击enter或鼠标左键

我认为如果你有jQuery,你可以在客户端做到这一点。Asp。. NET下拉列表呈现为HTML选择元素。

还没有测试过,但我认为你可以在更改事件中阻止回发,并在按下enter键时触发它…

$("#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','')                      
    }
});

看看关键钩子,尝试这样做,这将是你的答案。

http://www.codeproject.com/Articles/19004/A-Simple-C-Global-Low-Level-Keyboard-Hook