从客户端处理程序返回false不会阻止回发

时间:2013-10-01 16:16:47

标签: javascript jquery asp.net webforms

我在WebForms页面上有以下按钮:

<asp:Button ID="btnNewProgramNext" runat="server" Text="Next &gt;&gt;" />

我有以下javascript / jquery来处理它的事件。

$('#<%= btnNewProgramNext.ClientID %>').on('click', function (e) {
    var errorMessage = '';
    var ok = false;
    var newCompany = $('#<%= NewCompanyMode.ClientID %>').val();
    if (newCompany == 1) {
        if (!$('#<%= txtProgramCompanyName.ClientID %>').val())
            errorMessage = 'You must enter a company name.';
        else if (!$('#<%= txtContactFirstName.ClientID %>').val())
            errorMessage = 'You must enter a contact first name.';
        else if (!$('#<%= txtContactLastName.ClientID %>').val())
            errorMessage = 'You must enter a contact last name.';
        else
            ok = true;
    }
    else {
        // Do something else
        ok = true;
    }
    $('#newProgramErrorMessage').text(errorMessage);
    return ok;
});

问题是,当此处理程序返回false时(当ok为false时,或者当我将最后一行更改为return false时),仍会发生回发。

是否有任何阻止javascript回发的技巧?我希望这能奏效。

2 个答案:

答案 0 :(得分:2)

您需要e.preventDefault()才能取消按钮点击事件。

$('#<%= btnNewProgramNext.ClientID %>').on('click', function (e) {
    var errorMessage = '';
    var ok = false;
    var newCompany = $('#<%= NewCompanyMode.ClientID %>').val();
    if (newCompany == 1) {
        if ($('#<%= txtProgramCompanyName.ClientID %>').val() == "")
            errorMessage = 'You must enter a company name.';
        else if ($('#<%= txtContactFirstName.ClientID %>').val() == "")
            errorMessage = 'You must enter a contact first name.';
        else if ($('#<%= txtContactLastName.ClientID %>').val() == "")
            errorMessage = 'You must enter a contact last name.';
        else
            ok = true;
    } else {
        // Do something else
        ok = true;
    }
    if (!ok) {
        e.preventDefault();
        $('#newProgramErrorMessage').text(errorMessage);
    }
    // else everything is valid, so post back to server.
});

答案 1 :(得分:1)

为什么不尝试通过ClientClick属性挂钩,而不是使用jQuery订阅click事件。这可能是ASP.NET用来确定是否杀死PostBack的路径。