2009-10-10 48 views
1

比方說,我附上一個javascript「改變」事件處理程序,以一個select元素,一些調度一個Ajax請求從服務器加載一些東西。如何處理IE選擇平變化和AJAX請求

這是在Firefox罰款。但是,在IE中,每次使用鼠標滾輪快速滾動組合框選項時,更改事件都會觸發。這很麻煩,因爲它用請求發送服務器,並且不能保證請求以正確的順序返回,因此客戶端狀態可能會變得不一致。

現在,我們以前的解決方法是,我們將推出一個超時的變化處理,使得它將等待一秒鐘的一小部分實際調度請求之前。如果在那麼短的時間內,另一個更改事件進入,我們取消之前的超時並啓動一個新的超時,從而防止垃圾郵件發送多個請求。現在

,而這似乎是工作,這是一個有點hackish,我想知道是否有任何更好的辦法。是否有一個我們可以掛鉤的不同事件,以便在用鼠標滾動時不會重複觸發?或者我們應該完全禁用鼠標滑輪(onmousewheel =「return false;」)? Firefox似乎不支持通過組合框進行鼠標滑動,但我不確定是否禁用鼠標滾輪是一種嚴重的可用性禁止或其他操作。

誰能推薦其他解決辦法?

回答

1

這是一個有點hackish的,肯定的,但它是我已經找到了最好的解決方案。我用的模式來解決幾個不同的問題,包括服務器的請求,自動保存用戶的文本輸入,自動完成文本輸入,拼寫檢查等,這是確定用戶交互暫停的好方法。

0

您必須在ajax請求中發送當前選項值,現在如果您在ajax響應中返回此值,您可以檢查當前選擇的選項是否與響應返回的值相同,否則使用此選項,等待其他迴應!

+0

不錯的主意......不解決服務器問題而不必要地雖然垃圾郵件d:抽象的邏輯一「的onPause」功能,它會顯得不那麼哈克 – 2009-10-10 09:10:22

1

我還沒有真正嘗試過這種(除了回答這個問題了幾個測試),但也許你能得到它的工作使用onblur事件。也許保持onchange事件,以瞭解onblur事件處理程序是否應該觸發Ajax請求。