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

125

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

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

Как я могу заставить эту кнопку запускать javascript, а не postback?

12 ответов

244
Лучший ответ

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

<asp:button runat="server".... OnClientClick="myfunction(); return false;" />
  • 3
    Я думаю, что вы имеете в виду OnClientClick="myfunction(); return false;" для JavaScript
  • 11
    Во многих случаях люди используют onclick или OnClientClick с этим синтаксисом <asp: Button OnClientClick = "myFunction ()" />, где myFunction () возвращает false, а этого недостаточно - вам нужно использовать OnClientClick = "return myFunction ()"
Показать ещё 3 комментария
30
YourButton.Attributes.Add("onclick", "return false");

или

<asp:button runat="server" ... OnClientClick="return false" />
12

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

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


$("#btnMyButton").click(function (e) {
// some actions here
 e.preventDefault();
}
  • 0
    Это элегантный ответ, потому что он позволяет вам проверять условия для отключения.
  • 1
    Никогда не используйте protectDefault, так как это остановит другие события, которые зависят от этого события -1
7

Рассмотрим это.

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

}
     </script>
5

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

3

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

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

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

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

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

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

2

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

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

если nee submit

...
<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

В моем случае я решил добавить return в 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()" />
  • 0
    Как запустить метод OnClick после этого.
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

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

  • 3
    -1 Это не работает. Он все еще отправляет форму.
  • 0
    ASP.NET добавляет; __doPostBack( до конца скрипта клика клиента.
1

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

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

чем в JQuery

$("#btnID").click(function(e){e.preventDefault();})

Ещё вопросы

Сообщество Overcoder
Наверх
Меню