如何查找导致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来检测用户何时真正离开盒子。在这一点上,你可以阅读哪个项目被选中,并采取相应的行动。这更多的是一种变通方法,但可能会满足您的需要。
编辑:另一个选项是检测按下回车键,就像这样:
if(e && e.which){ // NN4 specific code
e = e
characterCode = e.which
}
else {
e = event
characterCode = e.keyCode // IE specific code
}
characterCode变量现在具有按下按钮的"代码"。如果是回车键,则该代码将为13。你可以听听这个。
- 如何使用javascript和PHP动态触发onChange事件
- Javascript:如何在onChange事件期间更改日期时间值
- JavaScript onchange事件未在IIS7中激发
- 如何在jQuery中为asp:textbox生成onchange事件
- 当触发下拉列表的onchange事件时,使用JavaScript提交表单
- 当select标记触发onChange事件时,从mysql数据库加载html表
- Javascript:OnChange事件,将数组变量传递给另一个函数
- 如何使select onchange事件在页面加载时发生
- 在onchange事件中,可以传递不是当前控件的参数吗
- OnChange事件未激发
- 如何在onChange之前触发onClick事件(即使值已更改)
- 此multi-onChange事件是否有效
- 如何在Jasmine/Rect中测试带有范围输入的“onChange”事件
- JSON无法处理OnChange事件
- 为什么我的onchange事件发生在页面加载时,而不是在触发时
- 如何在React's onChange事件
- JS:Onchange事件在启动时激活
- 基本CKEditor/JQuery事件onChange
- 如何使事件onchange的HTML输入对象不提示文件资源管理器
- 文本区域中的事件onchange不't触发,直到触摸UI