按钮stopPropagation不工作

时间:2015-06-26 18:10:12

标签: c# jquery asp.net

我有一个按钮:

<button id="btnSearch" runat="server" onserverclick="btnSearch_Click">Find</button>

背面的代码:

protected void btnSearch_Click(object sender, EventArgs e)
{
    btnSearch.InnerText = "Clicked!";
}

我正试图停止执行。所以我构建了一个像这样的jQuery函数:

    $("[id$=btnSearch]").on("click", function (e) {
        $(this).html("Searching...");
        e.preventDefault();
        e.stopPropagation();
        e.stopImmediatePropagation();
        return false;
    });

但代码仍然落后于背面。我想创建一个条件,如果达到,我的按钮将不会转到后面的代码,但我似乎有困难只是首先停止它。通常e.preventDefault()有效。为什么在这种情况下不起作用?为了记录,jQuery和后端功能都已成功到达。

3 个答案:

答案 0 :(得分:2)

我认为你的jquery没有获得该按钮的id。试试这个..

<button id="btnSearch" runat="server" onserverclick="btnSearch_Click" ClientIdMode="static">Find</button>

Jquery的:

$("#btnSearch").on("click", function (e) {
        $(this).html("Searching...");
        e.preventDefault();
        e.stopPropagation();
        e.stopImmediatePropagation();
        return false;
    });

<强> EDITED

只需从按钮中删除onserverclick即可。喜欢这个

<button id="btnSearch" runat="server" ClientIdMode="static">Find</button>

从你的jquery代码中激活那个事件。像这样

$("#btnSearch").on("click", function (e) {
    $(this).html("Searching...");
    if (condition) {
        //IF TRUE    
        var SearchButton = document.getElementById("<%= btnSearch.ClientID %>");
        SearchButton.click();
    } else {
        return false;
    }
}); 

答案 1 :(得分:1)

更准确的选项涵盖其他提交可能性(作为回车键)是使用submit处理程序

$('form').on('submit', function() {
    if (condition) {
        return false; // cancel submit
    }
}

答案 2 :(得分:1)

我注意到你正在使用onserverclick

HtmlButton.OnServerClick docs说明以下内容:

  

当HtmlButton控件出现时,会引发ServerClick事件   点击。此事件导致从客户端到达的往返   服务器和后面。它故意与客户端不同   OnClick事件。 如果代码与a运行之间存在冲突   ServerClick事件和代码由客户端OnClick事件运行,   服务器端事件指令将覆盖客户端代码。

这可能会覆盖并阻止您的客户onclick按预期执行。

  

我想创建一个条件,如果达到,我的按钮将不会转到代码   后面

为了有选择地调用代码,您可能需要删除onserverclick,并在满足条件时手动调用__doPostBack中的onclick