Jquery “检测”;更改“;选择列表中的事件-通过鼠标单击或按键

Jquery “检测”;更改“;选择列表中的事件-通过鼠标单击或按键,jquery,selectlist,Jquery,Selectlist,我试图检测“选择列表”的“更改”事件,就好像是通过“鼠标点击”或“按tab键(即失去焦点)”来检测一样。此后,我想根据这两个动作做不同的事情 具体内容如下: 我在表格行中有一个“选择列表”。每当用户从此列表中选择一项时,一些控件(输入、选择等)就会动态加载到下一个表行中所述“选择列表”的下方 我想从这里得到的是,如果用户通过键盘从“选择列表”中选择某个项目并按tab键,则焦点应自动转移到动态呈现的第一个控件。类似地,如果用户使用鼠标从“选择列表”中选择项目,则焦点不应移动到任何位置 下面是我实现

我试图检测“选择列表”的“更改”事件,就好像是通过“鼠标点击”或“按tab键(即失去焦点)”来检测一样。此后,我想根据这两个动作做不同的事情

具体内容如下:

我在表格行中有一个“选择列表”。每当用户从此列表中选择一项时,一些控件(输入、选择等)就会动态加载到下一个表行中所述“选择列表”的下方

我想从这里得到的是,如果用户通过键盘从“选择列表”中选择某个项目并按tab键,则焦点应自动转移到动态呈现的第一个控件。类似地,如果用户使用鼠标从“选择列表”中选择项目,则焦点不应移动到任何位置

下面是我实现相同功能的代码:

$("#mySelectList").bind("change", function (e) {

var selList = $(this);

$.post("/someController/someAction", { paramOne: $(this).val() }, function (result) {

    // ..... //
    // consume "result" and load dynamic controls underneath the "select list"
    selList.closest('tr').next().find("input, select:first-child").focus(); // set focus to the next immediate control

}, 'json');

});
综上所述,使用“tab”时一切正常,但如果用户选择使用鼠标,则焦点仍会移动到下一个动态控件,这是不好的。如果用户使用鼠标选择一个项目,我想只关注“选择列表”

我还尝试使用“keyup”代替“change”,但这会导致“select list”立即触发ajax请求,这是在使用“tab-tab”或“tab-shift+tab-tab等控件导航时不必要的ajax请求的问题

如果你们知道一个更好的方法来实现这个场景,请告诉我。我也期待着一个可能的解决方案,以运行在每一个现有的浏览器

期待您的回复


提前谢谢。

我不确定我是否完全理解,但是像这样的东西怎么样

var curFocus;

$("body *").focus(function(){ curFocus = $(this); });

$("#mySelectList").change(function(){
    var selList = $(this);

    if(curFocus[0] != selList[0]){
       $("#myOtherSelect").focus();
    }
});

模糊怎么样?如果按tab键,焦点将自动从元素中移除。如果用户单击,焦点将保持不变。因此,要检测“按tab键”,模糊似乎是最好的方法。@Felix:谢谢你的回答“模糊”似乎是一条路要走。但不幸的是,“blur”会抑制“change”事件,最终也会停止任何ajax请求。还有其他想法吗?我想,一定有什么东西可以帮助区分更改操作是“鼠标点击”还是“焦点丢失”。任何人