2010-08-25 115 views
3

我有一個使用jQuery UI 1.8.4自動完成連接的文本框。我有選擇事件連接起來,所以當用戶從列表中選擇一個項目時,它調用另一個JavaScript函數,該函數發出ajax請求來保存數據並更新XML文檔。onBlur事件重寫jQuery UI事件

在同一文本框中有一個onBlur事件,以便如果用戶手動鍵入文本框中的數據和選項卡而不選擇自動完成項目,它也會執行更新。

當用戶從自動完成列表中選擇一個項目時,它會導致onBlur被觸發而覆蓋選擇事件,因此唯一被更新的數據就是用戶輸入的文本框中的任何數據,並且由於select事件不會「不要更新文本框的內容。

我試過使用相同結果的更改事件。

有沒有辦法確保select事件被觸發,並且還實現了一些功能,在用戶鍵入值而不是選擇它的情況下模擬onBlur?

謝謝。

+0

在調用'.autocomplete()'之後,你是否試過綁定你的'blur'事件*? – 2010-08-25 13:55:52

+0

從自動完成列表中選擇一些東西的簡單行爲會導致onBlur觸發。 – 2010-08-25 13:59:24

+0

我明白,但這兩個事件處理程序,並執行綁定的順序:) – 2010-08-25 14:07:51

回答

0

問題是當用戶與自動完成菜單交互時,文本框失去焦點並且模糊事件觸發。除非組件告訴您,否則無法真正檢測用戶是否在自動完成控件中。

如果您使用的自動完成控件在關閉時沒有告訴您的方法,那麼您可能會在啓動代碼之前使用setTimeout等待一段時間。

+0

我使用了兩個響應的組合。我以不同的順序對事件進行了約束,這在一定程度上起作用。這些事件調用另一種使用AJAX的方法。由於這兩個事件現在都在觸發,所以外部腳本(不是我的)發出了一個未準備好的錯誤。我使用了setTimeout來防止他們在同時發生的請求中破壞對方。感謝你們倆! – 2010-08-25 19:57:59

0

我覺得ONSELECT總是解僱 「而是」其唯一的onblur文本框的事件之後被解僱。

只有當您使用鼠標選擇自動完成項目而不是通過鍵盤選擇項目時,纔會發生這種情況。

根據鼠標點擊或鍵盤選擇的不同,您可以使用select事件取消在onblur上進行的更新。

select: function (event, ui) { 

    if (event.originalEvent.originalEvent.type == 'click') { 
      //undo the onblur event happened by an ajax call here 
      //$("#txtbox").val() will still be available to do an undo 
    } 

    //do the actual onselect function here 
}