繁体   English   中英

如何找到导致IE中选择框的onChange事件的原因-键盘还是鼠标?

[英]How to find what caused onChange event for select box in IE - keyboard or mouse?

有什么方法可以找出导致Internet Explorer(> = IE8)中的选择框上的onChange事件发生的原因-键盘还是鼠标?

我有一个代码,当用户选择一个值时,该代码会执行某些操作,并且此代码在Firefox和Chrome浏览器中效果很好,但在IE中效果不佳(不足为奇)。 在IE中,仅当用户使用鼠标但不使用键盘时,它才能正常工作,因为这会在每次按键时触发onchange事件(不适用于普通浏览器的Enter)。

因此,要解决此问题,我需要知道是否使用键盘触发了事件,然后对其进行过滤。

更新:

好的,玩了一段时间后,我找到了一个很好的解决方案。 如果有人发现它有用,请在此处发布。 下面的解决方案使用jQuery,但也可以使用纯Javascript完成。

这是导致问题的代码:

$("#mySelectBox").change(function () {
    // Do something
});

这是我的解决方案。 这可能不是完美的,但对我而言有效。 当然,事件处理程序可以链接在jQuery中。 下面的代码存储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事件。 由于这在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。您可以听一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM