【问题标题】:page posted back due to javascript validation issue由于 javascript 验证问题而发回的页面
【发布时间】:2013-04-26 11:40:12
【问题描述】:

我正在研究 asp.net,我设计了一个简单的表单

我正在做 javascript 验证。

当任何文本框为空时,它应该在标签中显示错误

但不幸的是,即使有错误,我的页面每次都会被回复

因此标签正在刷新并且不显示错误消息

并且空白数据也被发布到服务器

因为,使用 Telerik Controls,我正在调用的按钮:

<telerik:RadButton ID="btnSave" runat="server" Text="Save" OnClientClicked="validate" 
                    OnClientClicking="validate" onclick="btnSave_Click">

我的 javascript 代码:

    function validate() {

        var flag = 0;
        var errorText = "";
        if (document.getElementById('txtPartyCode').innerHTML == "") {
            errorText = errorText + "\n Please Enter PartyCode";
            flag = 1;
        }

        if (document.getElementById('txtEmailId').innerHTML == "") {
            errorText = errorText + "\n Please Enter EmailID";
            flag = 1;
        }


        if (document.getElementById('txtPhoneNumber').innerHTML == "") {
            errorText = errorText + "\n Please Enter Phone Number";
            flag = 1;
        }



        if (document.getElementById('txtBrockrage').innerHTML == "") {
            errorText = errorText + "\n Please Enter Brockrage";
            flag = 1;
        }


        if (document.getElementById('txtTax').innerHTML == "") {
            errorText = errorText + "\n Please Enter Tax";
            flag = 1;
        }

        document.getElementById('lblErrors').innerHTML = errorText;

        if (flag == 1) //{

            //alert(errorText); 
           //return true;
        //}
        //else
            return true;

    }

</script>

javascript函数有没有错误???

【问题讨论】:

  • 你为什么不为此使用 require 字段验证器
  • 我的 TL 不允许我这样做
  • 你试过返回false吗?如果(标志==1)?
  • 你能分享一下调用它的代码吗
  • @Arshad 我从 Telerik 按钮调用这个 javascript 函数

标签: c# javascript asp.net .net telerik


【解决方案1】:
<telerik:RadButton runat="server" ID="btnTest" OnClientClicking="validate" />

javascript 将是

function validate(sender, args)
{

    // your code 


    if (flag == 1)
    {
        args.set_cancel(true);
    }
    else
    {
        args.set_cancel(false);
    }
}

set_cancel(shouldCancel) - 设置一个布尔值,指示是否 该活动将被取消。设置 true 意味着事件将 取消。

【讨论】:

  • 是的,页面没有回发,但是在填充所有数据并将标志设置为 1 后,服务器端代码现在没有被执行。有什么问题?
  • 您说的是“在填充所有数据后,将标志设为 1”。什么意思,如果 flag=1 服务器端代码将不会执行。
  • 很好!请不要忘记标记正确答案。它可能会帮助其他人。编码快乐!!
  • @MicrosoftPS 当我们返回值为 true 时,它​​会执行服务器端代码,我在 flag=1 上执行此操作
【解决方案2】:

对于服务器控件,您可能希望使用 ,因此它应该看起来像

document.getElementById('<%= lblErrors.ClientID%>')

我不确定您是如何调用此函数的,但如果验证失败,您应该返回 false。即

if (flag == 1)
  return false;

如果你在服务器按钮的 onclientclick 中调用它,那么它应该看起来像

OnClientClick="return validate();"

希望对你有帮助!

编辑:

在这种情况下,您可能需要如下所示调用它(注意:我没有测试过)

<telerik:RadButton ID="btnSave" runat="server" Text="Save" OnClientClicked="OnClientClicked" onclick="btnSave_Click">

<script type="text/javascript">
    function OnClientClicked(button, args)
    {
        if (validate())
        {
            button.set_autoPostBack(true);
        }
        else
        {
            button.set_autoPostBack(false);
        }
    }
</script>

您可能想查看 Telerik 按钮事件 here

【讨论】:

  • 因为按钮是telerik,返回不允许..请看我编辑的问题
【解决方案3】:

查看here 了解更多详情,您可以尝试更改最后一个if 块,如下所示:

 function validate(sender, args)
 {
   // your code for validation 
  if (flag == 1)
    {
    args.set_cancel(false);
    }
    else
    {
        args.set_cancel(true);
    }
  }

像这样更新你的代码:

<telerik:RadButton ID="btnSave" runat="server" Text="Save" 
OnClientClicked="validate"
onclick="btnSave_Click">

【讨论】:

  • 试试OnClientClicking="return validate();"
  • 问题是我正在使用 Telerik 按钮,它不允许我在函数调用中返回 functionname()
  • @Damith 在 Telerik 控件中,“return validate();”不允许,只有 validate();允许
  • 函数不会被 OnClientClicked="return validate();"... 如果它是 OnClientClicked="validate();"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-28
  • 2011-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 2011-01-18
相关资源
最近更新 更多