【问题标题】:ASP.NET OnClientClick="return false;" doesn't workASP.NET OnClientClick="return false;"不工作
【发布时间】:2011-04-23 01:53:39
【问题描述】:

我只想在 Web 用户控件中添加一些客户端(JQuery Javascript)验证。我放置了一个 OnClientClick 处理程序并调用了该函数。但是,即使我返回“false”,OnClick 方法总是会被触发。我做错了什么?

我使用的是 VS 2010,目标是使用 JQuery 1.4.2 的 4.0 框架。和 JQuery UI 1.8.4。

这是一个示例代码:

<td style="text-align:right"><asp:Button ID="btnAddSave" OnClientClick="return ValidateMail();" OnClick="btnAddSave_Click" runat="server" Text="Submit" /></td>

脚本方法:

function ValidateMail() {
alert("Bouton clicked");
return false;

}

如果我在 Page_Load 事件中设置断点,我看到我进入并且 btnAddSave_Click 事件也被执行。

【问题讨论】:

  • 你试过不带警告框吗?我最近读过另一篇这样的文章
  • 我用 ASP.NET 4 对此进行了测试,得到了预期的行为。
  • 检查阻止它返回 false 的 javascript 错误
  • 当您查看 HTML 页面的渲染源代码时,您的“onclick”事件是在标签中渲染还是在后面的代码中覆盖?另外,您是否有任何其他绑定到此控件的 JQuery 事件可能会拦截调用?

标签: asp.net validation onclick onclientclick


【解决方案1】:

出于某种原因,虽然我没有附加任何 jquery 事件处理程序,但它不起作用。

真正起作用的是:

OnClientClick="if (validate_form() == false) return(false);"

【讨论】:

  • 你也可以写 OnClientClick="return validate_form()"
【解决方案2】:

您是否有返回true 的单击事件处理程序(通过jquery 注册)?在这种情况下,OnClientClick 的返回值将被忽略。

看看我的问题(和答案):Why doesn't returning false from OnClientClick cancel the postback

【讨论】:

    【解决方案3】:

    试试改成

    OnClientClick="ValidateMail(); return false;" 
    

    【讨论】:

    • 感谢您的回答,它有效 - 但这没有任何意义! 3 个月前,我用 Firefox 修复了同样的问题(在他们的最后一个版本之前),它与“return ValidateMail();”一起工作。
    • @alonso.torres 我不明白这一点。这不只是“总是”返回 false,即即使表单通过验证,它现在也会返回无效,因此永远不会触发 OnClick?
    【解决方案4】:

    很好的答案。我这样做。相同的结果 - 如果从 Java 函数返回 false,则不会触发 OnClick 事件。

    OnClientClick = "if (!ValidateDelete()) return false;"
    OnClick="btnDeleteSupplier_Click"
    

    【讨论】:

      【解决方案5】:

      奇怪的是,这对我有用:

      OnClientClick="javascript:SubmitTableData(); return CanSubmit();"
      

      设置第一个函数调用的返回值提交:

      function CanSubmit() {    
          return submit;
      }
      

      希望这对某人有所帮助。

      【讨论】:

        【解决方案6】:

        我写这个答案只是因为我在 ASP.NET WebForms 中使用 html 按钮,但我找不到解决方案,为什么要用工作示例替换我的代码。这是为什么它不起作用的解决方案。希望它能帮助你理解这个问题,就像检查它对我有帮助一样。这是我的第一篇文章,很抱歉风格。

        <button type="button" id="buttonAddOrEdit" class="btn btn-success"  runat="server" onclick="return myValidate()"    onserverclick="buttonAddOrEdit_ServerClick">Zapisz</button>
        

        还有javascript函数:

        function myValidation() {
                if (validator.form()) {
                   //Project logic
                    return true;
                }
                else return false;
            };
        

        在正确验证后使用客户端单击不会触发绑定到按钮的服务器端事件。提到的解决方案将一段代码更改为:

        onclick="if(!myValidation()) return;"

        之所以有效,是因为创建了使用 onserverclick 在页面上呈现的 html。 html 按钮上的 Onserverclick 正在被 javascript 中的 __doPostBack 方法替换。在客户端呈现的 html 按钮的完整代码如下所示:

        <button onclick="return myValidation(); __doPostBack('ctl00$PortalContent$buttonAddOrEdit','')" id="ctl00_PortalContent_buttonAddOrEdit" type="button" class="btn btn-success">Zapisz</button>  Błąd składni
        

        在用 if 语句替换它之后。

        <button onclick="if(!myValidation()) return; __doPostBack('ctl00$PortalContent$buttonAddOrEdit','')" id="ctl00_PortalContent_buttonAddOrEdit" type="button" class="btn btn-success">Zapisz</button>
        

        使用 return myValidate();不会触发事件,因为它在 __doPostBack 之前返回。

        以下代码将允许您在必要时向按钮添加一些其他代码,并且不会导致任何问题。

        【讨论】:

          【解决方案7】:

          只需添加javascript:

          例子:

          javascript:return ValidateMail();
          

          【讨论】:

          猜你喜欢
          • 2016-05-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-30
          • 1970-01-01
          • 2021-09-05
          • 1970-01-01
          相关资源
          最近更新 更多