ASP.NET OnClientClick="return false;" 不起作用

15
我想在Web用户控件中添加一些客户端(JQuery Javascript)验证。 我放置了一个OnClientClick处理程序,函数得到调用。 但是,即使我返回“false”,OnClick方法仍然会被触发。 我做错了什么?这里是一个示例代码:
<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事件也会被执行。

你尝试过不使用警告框吗?我最近读到了另一篇类似的帖子。 - GôTô
我已经使用ASP.NET 4进行了测试,并获得了预期的结果。 - Forgotten Semicolon
4
检查JavaScript错误,防止其返回false。 - Aristos
当您查看 HTML 页面的渲染源代码时,您的“onclick”事件是在标记中呈现还是在后台代码中进行了重写?此外,您是否有任何其他绑定到此控件的 JQuery 事件可能会拦截该调用? - Steven Raines
8个回答

12

由于某些原因,尽管我没有附加任何jQuery事件处理程序,但它并未起作用。

实际起作用的是:

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

1
你也可以写成 OnClientClick="return validate_form()"。 - hasi05

9

4
尝试将其更改为:
OnClientClick="ValidateMail(); return false;" 

谢谢你的回答,它有效了 - 但这毫无意义!3个月前我曾经用Firefox(在他们的最后一个版本之前)解决过完全相同的问题,并且它使用“return ValidateMail();”就可以工作。 - Dane Balia
3
@alonso.torres 我不理解这个。这难道不是总是返回 false 吗?即使表单通过验证,它现在也将返回为无效,因此 OnClick 永远不会被触发? - rism

3

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

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

1
奇怪的是,这对我起作用了:

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

在第一个函数调用中设置返回值submit:

function CanSubmit() {    
    return submit;
}

希望这能帮助到某个人。

0
尝试使用带有OnClick属性的隐藏按钮,例如:
<asp:Button ID="Button6" runat="server" onclick="btnAddSave_Click" Text="Button" style="visibility: hidden;" />

从按钮中删除OnClick属性,并在OnClientClick属性中返回false,如下所示:

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

点击隐藏按钮,根据脚本方法中的条件触发OnClick方法:

function ValidateMail() {
 if(true)
 {
    $('#Button6').click();
 }
 else
 {
    //do something
 }
}

0
我写这篇答案只是因为我正在使用带有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;"

这样做是因为html页面上呈现的方式与javascript中的__doPostBack方法创建的onserverclick不同。在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 之前返回。

以下代码将允许您在必要时向按钮添加其他代码,而不会引起任何问题。


0

只需添加javascript:

例如:

javascript:return ValidateMail();

1
欢迎来到Stack Overflow!Stack Overflow要求所有帖子必须使用英语(https://stackoverflow.blog/2009/07/non-english-question-policy/)。为了遵守这个规定,我已经删除了您帖子中的非英语部分。您也可以使用以下允许使用非英语的特定语言的Stack Overflow社区:西班牙语日语俄语葡萄牙语 - FelixSFD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接