jQuery检测更改是如何触发的

jQuery检测更改是如何触发的,jquery,html-select,onchange,Jquery,Html Select,Onchange,如果我有一个选择更改事件,如 $('#select').on('change', function (e) { //do things }); 我如何判断用户是否通过切换到它并键入字母,或者单击它的一个选项来更改它 基本上,当下拉列表发生变化时,我会尝试延迟操作,但只有当有人键入时才会延迟。单击不应保证延迟,但可能有人正在键入多个字母,因此如果是这样的话,我希望在他们键入时给他们足够的时间。你的意思是.click()vs.keyPress()?@j08691不一定,因为我只要单击下拉

如果我有一个选择更改事件,如

$('#select').on('change', function (e) {
    //do things
});
我如何判断用户是否通过切换到它并键入字母,或者单击它的一个选项来更改它



基本上,当下拉列表发生变化时,我会尝试延迟操作,但只有当有人键入时才会延迟。单击不应保证延迟,但可能有人正在键入多个字母,因此如果是这样的话,我希望在他们键入时给他们足够的时间。

你的意思是.click()vs.keyPress()?@j08691不一定,因为我只要单击下拉菜单就会触发单击事件,如果有人按了一个没有以该字母开头的选项的键,就不会有变化happened@j08691我应该注意的另一件事是,我还有其他一些东西也可以触发此下拉列表的更改。为
.keyPress
创建全局布尔值。单击
,然后如果
。打开('change'
发生你知道如果上面的一个是真的…那是因为…在一个变更事件结束时,将两个bools都设置为false..是的,@abc123有效
var keyPressed = false;
var clicked = false;

$('#select').on('click', function() {
  clicked = true;
})
.on('keyPress', function() {
  keyPressed = true;
})
.on('change', function (e) {
  if (keyPressed) {
    //do things
  }

  keyPressed = false;
  clicked = false;
});