2013-06-21 60 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