2013-06-21 85 views
0

我用jQuery來驗證放在更新面板內的文本框jQuery的「返回false」不更新面板

$("[id*='btnCreate']").live('click', function() 
{ 
    var regex = new RegExp("^[a-zA-Z0-9]+$"); 
    if (!regex.test($("[id*='txtbxTemplateName']").val())) 
    { 
    alert('hit'); 

    $("[id*='lblError']").text() = 'Template name is invalid!'; 

    return false; 
    } 
}); 

click事件函數被調用內部的正常工作,但是返回false,它仍然擊中後後面的代碼。

請幫我解決這個問題。

+3

這個'$(「[id * ='lblError']」)。text()='模板名稱無效!不對... – elclanrs

+0

什麼循環?什麼代碼背後? – Bergi

+0

也確保當您使用更新面板時再次重新綁定您的事件[code] var prm = Sys.WebForms.PageRequestManager.getInstance(); prm.add_endRequest(function(){ //在此處重新綁定您的jQuery事件 }); [/ code] – Parwej

回答

2

我認爲你的意思是「仍然擊中代碼背後」,按鈕的默認操作沒有被阻止。這是因爲代碼永遠不會獲取return false,因爲一個錯誤:

$("[id*='lblError']").text() = 'Template name is invalid!'; 
return false; 

應該

$("[id*='lblError']").text('Template name is invalid!'); 
return false; 

你剛剛暴露出來,但是,爲什麼return false是一個糟糕的方式來防止的默認操作事件。這很糟糕,因爲錯誤處理程序中的任何錯誤都將意味着默認操作不會被阻止,因爲return false是處理程序中的最後一個語句。

如果您使用event.preventDefault(),會發生各種美麗的事情。其中最主要的是你可以在處理程序的早些時候發表聲明:

$("[id*='btnCreate']").live('click', function (event) { 
    var regex = new RegExp("^[a-zA-Z0-9]+$"); 
    if (!regex.test($("[id*='txtbxTemplateName']").val())) { 
    event.preventDefault(); 
    alert('hit'); 
    $("[id*='lblError']").text('Template name is invalid!'); 
    } 
}); 
+0

那麼[其實這不是一個語法錯誤](http://stackoverflow.com/q/13124417/1048572),但只是一個類型的錯誤:-) – Bergi

+0

@Bergi謝謝。爲您更新。 – lonesomeday

+0

這爲我工作。謝謝 – smv