2012-04-19 138 views
0

我得到了這樣的我的網頁上一個jQuery自動完成組合框:JQuery的自動完成更改事件

$.widget("ui.combobox", { 
     _create: function() { 
     ... 
     var input = this.input = $("<input>") 
       .insertAfter(select) 
       .val(value) 
       .autocomplete({ 
        ... 
        select: function(event, ui) { 
        ... 
        change: function(event, ui) { 
        ... 

$(function() { 
    $("#myid").combobox(); 
} 

selectchange事件我執行Ajax調用和更改隱藏字段的一些信息,但問題出現時,我只是鍵入的東西和沒有unfocusing文本字段點擊提交按鈕 - change事件沒有被觸發,我得到一個錯誤的數據在服務器上(基本上我得到一個隱藏的領域,這是以前通過選擇更改觸發的事件設置的數據,但沒有趕上最新)。那麼如何在發送表單之前執行文本字段以便觸發change事件?或者也許有其他方法可以捕捉並觸發文本字段中的最新更改(通過某些onkeypress事件替換更改)?謝謝你的幫助。

回答

0

您可以禁用提交按鈕

$(".submit-btn").click(function(e){e.preventDefault();}); 

這種方式提交按鈕不會提交表單和表單將獲得選擇或更改事件怎麼把用戶通過點擊提交已不聚焦的默認操作按鈕

+0

好的,但接下來呢?之後提交表單在某種程度上給了我錯誤的值 – 2012-04-20 12:32:31

+0

在這種情況下,你能不能抽象出onselect或onchange處理程序內部的函數,並在點擊提交按鈕時調用相同的函數? – walmik 2012-04-22 06:29:30

+0

我不能因爲在這個功能iam獲取當前的對象上下文(我有3個自動完成框),點擊它後會出錯 – 2012-04-22 23:13:39

0

您可以做的是獨立出取出變化事件隱藏字段數據的功能。此外,還有一個回調函數作爲該函數的參數,它將在數據更新後調用。然後,您可以在更改事件處理程序和表單的提交處理程序中使用相同的功能。在提交處理程序中,您將禁用默認的提交操作,併爲該函數提供回調,以便在隱藏字段中更新數據時,您可以通過JS提交表單。

上述方案應該可行,但如果你是獲取數據從你自己的服務器填寫,那麼你不應該這樣做通過JavaScript客戶端,但應該只在您的服務器端代碼發生。例如,如果您使用隱藏字段來映射用戶輸入的字符串,例如「波蘭」到你的數據庫中的某個ID並將該ID存儲在隱藏字段中,那麼你應該簡單地將「波蘭」作爲字符串發送到服務器,並在服務器上處理該映射。這樣你的表單就不用等待從服務器獲取這個映射。當然,這隻能在您向服務器發送AJAX請求時才能完成,而不能從您的服務器無法訪問的其他服務器發送。

+0

你是對的Iam設置城市地區國家IDS,但你建議發送一個標題然後比較將不起作用,因爲不同國家的許多城市有相同的名稱,但數據庫中的ID不同。它可以通過組合框來解決,但不能在名稱只是手工輸入時解決 – 2012-04-20 10:19:26