2011-09-18 33 views
0

我做這個簡單的jQuery腳本來檢查的形式對我來說...如何讓jquery只顯示正確的class div和ajax請求?

$(document).ready(function() { 
    $('.loading').hide();  
}); 

function check_username(){ 
    var username = $("#username").val(); 
    $('.loading').show(); 
    $.post("ajax.php", { 
     username: $('#username').val(), 
    }, function(response){ 
     $('.info').fadeOut(); 
     $('.loading').hide(); 
     setTimeout("finishAjax('info', '"+escape(response)+"')", 450); 
    }); 
    return false; 
} 

function check_email(){ 
    var email = $("#email").val(); 
    $('.loading').show(); 
    $.post("ajax.php", { 
     email: $('#email').val(), 
    }, function(response){ 
     $('.info').fadeOut(); 
     $('.loading').hide(); 
     setTimeout("finishAjax('info', '"+escape(response)+"')", 450); 
    }); 
    return false; 
} 

function finishAjax(id, response){ 
    $('.'+id).html(unescape(response)); 
    $('.'+id).fadeIn(1000); 
} 

唯一的事情是,當有在後的用戶名錯誤在所有錯誤框的顯示錯誤,而不是一個分配給用戶名,無論如何要停止這一點,而不是分配所有的div來使用實用性的ID。

+0

請不要將字符串傳遞給'setTimeout' - 你可以傳遞一個函數:'setTimeout(function(){finishAjax('info',response)},450);' – ThiefMaster

回答

2

如果您使用的是.,那麼這是一個類選擇器而不是一個id。撥打setTimeout時,不應使用字符串。做;

setTimeout(function() 
{ 
    finishAjax('info', response); 
}, 450); 

這消除了逃避的必要性。但是,目前尚不清楚爲什麼你使用setTimeout

對於您的實際問題,您可以使用after而不是設置單獨的元素。並傳遞表單元素的實際ID:

E.g.

finishAjax('username', response); 

function finishAjax(id, response){ 
    $('#'+id).after(response).fadeIn(1000); 
} 

開始,您可以隱藏加載的CSS:

.loading 
{ 
    display: none; 
} 

,而不是你ready塊。

由於您使用的是jQuery,因此您可能需要查看jQuery Validate插件。

+0

謝謝你應該這樣做,感謝插件,但我不使用它們,我喜歡在使用我不明白的東西之前先學習它;) – carlgcode

+0

@carl,這是一個很好的哲學,爲什麼我把其餘的JS和CSS首先提示。 :) –

1

設置div的ID有什麼問題?由於更好的性能,使用jQuery應該儘可能多地使用ID而不是類。

如果您絕對不想這樣做,還有其他方法可以訪問DOM中的節點。例如,如果你有一些HTML的結構是怎樣的

<input type="text" id="username" /> 
<div class="info">The error message for username.</div> 

你可以簡單地做$('#username').next()訪問格,不使用它的類名。