2011-09-07 28 views
1

海蘭,大阿賈克斯問題..無法弄清楚

我用ajax有一個活的用戶名驗證:

<td id="user_process_live"><input type="text" id="user_live_ver" name="user" /></td> 

abnd以下Java:

$("input#user_live_ver").blur(function() { 
    var username=$(this).val(); 
    var dataString = 'username=' + username; 
    $.ajax({ 
     type: "POST", 
     url: "ajax/login_ajax.php", 
     data: dataString, 
     cache: false, 
     success: function(html) { 
      $("td#user_process_live").html(html); 
     } 

     }); 
    }); 

login_ajax.php返回相同的<input type=text id=user_live_ver name=user />,但應用了不同的樣式(背景顏色和邊框顏色):如果用戶名已存在,則爲紅色,如果用戶不存在,則爲綠色...

的問題是腳本做這只是一個時間..只是一個.blur() ...

如果我刪除.ajax({ ... etc });並插入每次alert(dataString);我點擊了該輸入的alert()被觸發,但不一樣的.ajax() ...

什麼似乎是問題?非常感謝

+0

也許是某種競爭條件。根據定義,AJAX調用將是異步的。你可能會重複調用相同的事件處理程序。 –

回答

4

的問題是,要更換輸入第一個AJAX請求返回所以你的模糊事件不再被束縛了。嘗試使用delegate您綁定事件:

var process_live = $("#user_process_live"); 
process_live.delegate("#user_live_ver", "blur", function() { 
    var username = $(this).val(), 
     dataString = {'username': username}; 
    $.ajax({ 
     type: "POST", 
     url: "ajax/login_ajax.php", 
     data: dataString, 
     cache: false, 
     success: function(html) { 
      process_live.html(html); 
     } 
    }); 
}); 
+0

更好的是,根本不要替換'input' - 只要用AJAX成功回調改變$(#'user_live_ver').css()'。 – Blazemonger

+0

這很好,但那麼我的.php文件會迴應什麼? – pufos

2

當您使用成功函數重新添加html字符串時,您將失去附加到輸入元素的事件處理程序。

也許嘗試更改輸入上的樣式,具體取決於您在成功函數中取回的內容,而不是完全替換HTML。

success: function(result) { 
    if (result) { 
    $("input#user_live_ver").addClass("valid"); 
    } else { 
    $("input#user_live_ver").addClass("invalid"); 
    } 
} 

所有你的PHP腳本必須現在要做的是迴歸true用戶名是否有效,false如果沒有。

使用json_encode($result)

0

也許HTML更換後的模糊事件參考丟了,我不嘗試,所以我不知道。

但您是否嘗試再次設置模糊事件?

0

這可能是因爲您刪除了$("input#user_live_ver")引用的元素,然後向DOM添加一個新元素,因此blur事件綁定消失。

你有兩個選擇:

  1. 使用.live()來綁定事件,以便它也結合未來的匹配元素。更多信息here
  2. 不要在來自AJAX資源的響應中替換DOM元素。只是重新設計它。 (這也會提供略好的性能。)
0

java * SCRIPT * ...他們是非常不同的東西!而且,爲了不返回輸入,爲什麼不返回成功或失敗消息並相應地更新類?保存一些DOM調用