Как отключить обратную передачу на кнопку asp


135

У меня есть кнопка asp. Он на стороне сервера, поэтому я могу показать его только зарегистрированным пользователям, но я хочу, чтобы он запускал функцию javascript, и кажется, что когда он runat = "server", он всегда вызывает событие обратной передачи.

У меня также есть обычная кнопка ( <input...>) не работает на сервере, и она работает нормально ...

Как сделать так, чтобы эта кнопка запускала только JavaScript, а не постбэк?

Ответы:


263

Пусть ваш javascript вернет false, когда это будет сделано.

<asp:button runat="server".... OnClientClick="myfunction(); return false;" />

16
Во многих случаях люди используют onclick или OnClientClick с этим синтаксисом <asp: Button OnClientClick = "myFunction ()" />, где myFunction () возвращает false, а этого недостаточно - вам нужно использовать OnClientClick = "return myFunction ()"
Брон Дэвис

17
Я должен был добавить UseSubmitBehavior = "False", а также; вернуть false
rob

9
Обязательно добавьте 'CausesValidation = "false", иначе он добавит "WebForm_DoPostBackWithOptions" и кучу дополнительной разметки.
Картер Медлин

Это не сработало для меня в ASP.NET 4+, однако ответ Константина просто OnClientClick="return false"сработал.
TylerH


15

Вы можете использовать действие jquery click и использовать функцию protectDefault (), чтобы избежать обратной передачи.

<asp:button ID="btnMyButton" runat="server" Text="MyButton" />


$("#btnMyButton").click(function (e) {
// some actions here
 e.preventDefault();
}

Это элегантный ответ, потому что он позволяет вам проверять условия для отключения.
Джон Мотт

1
Никогда не используйте protectDefault, так как это остановит другие события, которые полагаются на это событие -1
Петр Кула

1
@ppumkin: warnDefault - отличный способ сообщить другим слушателям событий, что вы обработали это событие, чтобы им не пришлось это делать. Я думаю, что вы имели в виду stopPropagation, который действительно не дает событию быть услышанным другими слушателями событий.
Себбас

Yeaaaaaaaaaa. нет. 4 года спустя, и я поддерживаю это даже больше теперь. Просто не делай ничего из этого.
Петр Кула

8

Учти это.

<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequest);
function BeginRequest(sender, e) {
    e.get_postBackElement().disabled = true;

}
     </script>

6

Другие правы, что вам нужен ваш обратный вызов, чтобы вернуть ложь; Тем не менее, я хотел бы добавить, что делать это, устанавливая onclick, - ужасно старый способ делать вещи. Я бы порекомендовал почитать про ненавязчивый javascript . Использование библиотеки, такой как jQuery, может упростить вашу жизнь, а HTML-код менее связан с вашим javascript (а jQuery теперь поддерживается Microsoft !)


4

ASP.NET всегда генерировать asp:Buttonкак input type=submit.
Если вам нужна кнопка, которая не выполняет публикацию, но нуждается в некотором контроле для элемента на стороне сервера, создайте простой ввод HTML с атрибутами type=buttonи runat=server.

Если вы отключите выполнение действий, связанных с щелчком OnClientClick=return false, оно ничего не будет делать при нажатии, если вы не создадите такую ​​функцию, как:

function btnClick() {
    // do stuff
    return false;
}

3

Вы не говорите, какую версию .NET Framework вы используете.

Если вы используете версию 2.0 или выше, вы можете использовать свойство OnClientClick для выполнения функции Javascript при возникновении события onclick кнопки.

Все, что вам нужно сделать, чтобы предотвратить возникновение обратной передачи на сервере, это возврат falseиз вызываемой функции JavaScript.


3

дополнительно для принятого ответа вы можете использовать UseSubmitBehavior = "false" MSDN


ASP.NET добавляет; __doPostBack(до конца кликайте скрипт клиента.
IvanH

3

В моем случае я решил добавить возврат в onClientClick:

Код позади

function verify(){
  if (document.getElementById("idName").checked == "") {
    alert("Fill the field");
    return false;
  }
}

Поверхность дизайна

<asp:Button runat="server" ID="send" Text="Send" onClientClick="return verify()" />

Как запустить OnClickметод после этого.
5377037

2

Вы можете использовать код:

<asp:Button ID="Button2" runat="server"
     Text="Pulsa"
     OnClientClick="this.disabled=true"
     UseSubmitBehavior="False"/>

если нужно представить

...
<form id="form1" runat="server" onsubmit="deshabilita()">
...
<script type="text/javascript">
    function deshabilita()
    {
        var btn = "<%= Button1.ClientID %>";
        if (confirm("Confirme postback"))
        {
            document.getElementById(btn).disabled = true;
            return true;
        }
        return false;
    }
</script>


2

С проверкой

В этом примере я использовал два элемента управления, ddlи txtbox, удачного кодирования

 asp:ScriptManager ID="script1" runat="server" /asp:ScriptManager

    asp:UpdatePanel ID="Panel1" runat="server"
       ContentTemplate

// ASP BUTTON
asp:Button ID="btnSave" runat="server" Text="Save" class="btn btn-success" OnClientClick="return Valid()" OnClick="btnSave_Click"


   /ContentTemplate    
    /asp:UpdatePanel    

  <script type="text/javascript">
        function Valid() {

            if ($("#ctl00_ContentPlaceHolder1_YOUR CONTROL NAME").val() == 0) {
                alert("Please select YOUR TEXT");
                $("#ctl00_ContentPlaceHolder1_YOUR CONTROL NAME").focus();
                return false;
            }

            if ($("#ctl00_ContentPlaceHolder1_YOUR CONTROL NAME").val().length == 0) {
                alert("Please Type YOUR TEXT");
                $("ctl00_ContentPlaceHolder1_YOUR CONTROL NAME").focus();
                return false;
            }
            return true;
        }
</script>

2

Вы можете использовать JQuery для этого

<asp:Button runat="server" ID="btnID" />

чем в JQuery

$("#btnID").click(function(e){e.preventDefault();})
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.