Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何找到IE中选择框的onChange事件的原因-键盘或鼠标?_Javascript_Jquery_Internet Explorer_Select_Onchange - Fatal编程技术网

Javascript 如何找到IE中选择框的onChange事件的原因-键盘或鼠标?

Javascript 如何找到IE中选择框的onChange事件的原因-键盘或鼠标?,javascript,jquery,internet-explorer,select,onchange,Javascript,Jquery,Internet Explorer,Select,Onchange,有没有办法找出是什么导致了Internet Explorer(>=IE8)中的选择框(键盘或鼠标)上的onChange事件 我有一个代码,当用户选择一个值时,它会做一些事情,这段代码在Firefox和Chrome中非常有效,但在IE中却不行(这并不奇怪,哈)。在IE中,只有当用户使用鼠标而不是键盘时,它才能正常工作,因为它会在每个按键上触发onchange事件(不像普通浏览器那样在Enter上) 所以,要修复此行为,我需要知道事件是否是使用键盘触发的,然后我将对其进行过滤 更新: 好的,玩了一会

有没有办法找出是什么导致了Internet Explorer(>=IE8)中的选择框(键盘或鼠标)上的onChange事件

我有一个代码,当用户选择一个值时,它会做一些事情,这段代码在Firefox和Chrome中非常有效,但在IE中却不行(这并不奇怪,哈)。在IE中,只有当用户使用鼠标而不是键盘时,它才能正常工作,因为它会在每个按键上触发onchange事件(不像普通浏览器那样在Enter上)

所以,要修复此行为,我需要知道事件是否是使用键盘触发的,然后我将对其进行过滤

更新:

好的,玩了一会儿之后我找到了一个好的解决办法。张贴在这里,以防有人会发现它有用。下面的解决方案使用jQuery,但也可以用纯Javascript完成

这是一个导致问题的代码:

$("#mySelectBox").change(function () {
    // Do something
});
这就是我的解决方案。这可能并不完美,但对我来说很有效。当然,事件处理程序可以链接到jQuery中。下面的代码存储了select的初始值,并使用它来避免在用户展开select框时进行初始鼠标单击。此外,它还过滤除Enter键以外的所有按键

function doSomething(el) {
    if (el.data["valueOnFocused"] !== el.val()) {
        // Do something
    }
}

$("#mySelectBox").focusin(function () {
    $(this).data["valueOnFocused"] = $(this).val();
});

$("#mySelectBox").keyup(function (e) {
    if (e.which === 13)
    {
        doSomething($(this));
    }
});

$("#mySelectBox").click(function () {
    doSomething($(this));
});

基本上,onchange事件应该在用户做出选择然后离开输入(无论是select、textbox、单选按钮等)时触发。由于这在IE中不起作用,您可以尝试改用onblur来检测用户何时实际离开该框。在这一点上,您可以读取所选的项目并相应地采取行动。这更像是一种变通方法,但可能会满足您的需要

编辑:另一个选项是检测按下Enter键,如下所示:

if(e && e.which){ // NN4 specific code
e = e
characterCode = e.which
}
else {
e = event
characterCode = e.keyCode // IE specific code
}

characterCode变量现在具有按下按钮的“代码”。如果是回车键,则该代码为13。您可以听一听。

基本上,当用户做出选择然后离开输入(无论是选择、文本框、单选按钮等)时,onchange事件应该被触发。由于这在IE中不起作用,您可以尝试改用onblur来检测用户何时实际离开该框。在这一点上,您可以读取所选的项目并相应地采取行动。这更像是一种变通方法,但可能会满足您的需要

编辑:另一个选项是检测按下Enter键,如下所示:

if(e && e.which){ // NN4 specific code
e = e
characterCode = e.which
}
else {
e = event
characterCode = e.keyCode // IE specific code
}

characterCode变量现在具有按下按钮的“代码”。如果是回车键,则该代码为13。你可以听一听。

是的,我已经尝试过模糊,但在我的情况下,它不是等效的替代品,因为它需要额外的步骤才能留下一个不太明显的控件。另外,用户看不到任何即时操作,这也会让人感到困惑。您可以尝试在按下Enter键时进行检测。我修改了我的答案,加入了这个选项。是的,我已经尝试过模糊,但在我的例子中,它不是等价的替代品,因为它需要额外的步骤来留下一个不太明显的控件。另外,用户看不到任何即时操作,这也会让人感到困惑。您可以尝试在按下Enter键时进行检测。我修改了我的答案,加入了这个选项。