有什麼方法可以找出在Internet Explorer(> = IE8) - 鍵盤或鼠標的選擇框上導致onChange事件的原因?如何找到IE中的選擇框 - 鍵盤或鼠標導致onChange事件?
我有一個代碼,當用戶選擇一個值時會做些什麼,而且這段代碼在Firefox和Chrome中非常好用,但是在IE中卻沒有(不出意外,呵呵)。在IE中,只有當用戶使用鼠標而不是鍵盤時,它才能正常工作,因爲它在每次按鍵時都會觸發onchange事件(而不是像普通瀏覽器一樣輸入)。
所以,要解決這個問題,我需要知道事件是否使用鍵盤觸發,然後我會過濾它。
更新:
好了,打了一下後,我找到了一個很好的解決方案。張貼在這裏,以防有人會發現它有用。下面的解決方案使用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));
});
是的,我已經嘗試過onblur,但它並不等同於我的情況,因爲它需要額外的一步才能離開一個並不明顯的控制。另外,用戶看不到可能會引起混淆的即時操作。 – graycrow 2012-02-07 14:53:28
您可以嘗試檢測何時按下Enter鍵。我修改了我的答案以包含該選項。 – 2012-02-07 14:57:24
會試試,謝謝。 – graycrow 2012-02-07 15:13:03