ASP.NET中不寻常的Javascript行为

时间:2012-04-09 04:08:40

标签: asp.net ajax

我在ASP.NET中创建了一个应用程序,并使用JavaScript来验证字段是否为空;调用ASP.NET按钮控件的onClientClick事件的验证函数,并使用onClick事件进行服务器端处理。

这里我附上了javascript:validation函数

function validate() {


    if (document.getElementById("<%=txt_msn.ClientID%>").value == "") {
        alert("Membership number can not be blank; Fill all fields marked as *");
        document.getElementById("<%=txt_msn.ClientID%>").focus();
        return false;
    }
 return true;
}

这里我在ASP.NET控件

下调用该函数
<asp:Button ID="btn_save_pi" runat="server" 
Text="Save" OnClientClick="return validate()" OnClick="btn_save_pi_click" />

现在我观察到,当验证函数返回false时,它执行服务器端方法,即onclick事件,但是返回true时它什么都不做。但是当我切换返回值时,意味着空字段返回true而非空字段返回false,那么它工作正常。

我为此感到困惑,为什么它就像这样。它假设像我上面写的那样行动,即在错误的返回和真正的返回执行服务器端处理时什么都不做。

请解释一下,这也有助于我开发更多应用程序。

2 个答案:

答案 0 :(得分:0)

在IE和FF中,您的代码对我来说非常好。

因此,如果它仍然给你带来问题,你可以使用asp.net验证控件来解决问题较少的方法。

但是如果您仍想使用自己的javascript验证,请使用:

http://docs.jquery.com/Plugins/Validation

您可以通过验证并按照自己的方式进行验证。 为了更好地理解它,请仔细阅读最后给出的例子或参考:

http://jquery.bassistance.de/validate/demo/

希望这会有所帮助......

答案 1 :(得分:-2)

所以也许有一个实际的解决方案,但我只是做了一点解决方法来完全避免使用OnClientClick属性。

隐藏按钮:

style="display:none;"

在按钮旁边,粘贴另一个“假”按钮:

<input type="button" value="Save" 
onclick="if (validate()) { 
document.getElementById('<%=btn_save_pi.ClientID%>').click(); }" />