Jak wyłączyć ogłaszanie zwrotne w przycisku asp


135

Mam przycisk asp. Jest po stronie serwera, więc mogę go wyświetlać tylko zalogowanym użytkownikom, ale chcę, aby uruchamiał funkcję javascript i wydaje się, że gdy jest to runat = "server", zawsze wywołuje zdarzenie postback.

Mam też zwykły przycisk ( <input...>) nie działający na serwerze i działa dobrze ...

Jak sprawić, by ten przycisk uruchamiał tylko javascript, a nie ogłaszanie zwrotne?

Odpowiedzi:


263

Niech twój javascript zwróci false po zakończeniu.

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

16
W wielu przypadkach ludzie używają onclick lub OnClientClick z taką składnią <asp: Button OnClientClick = "myFunction ()" />, gdzie myFunction () zwraca false i to nie wystarczy - musisz użyć OnClientClick = "return myFunction ()"
Bron Davies,

17
Musiałem dodać UseSubmitBehavior = "False", jak również; return false
rob

9
Upewnij się, że dodałeś „CausesValidation =" false "”, w przeciwnym razie doda on „WebForm_DoPostBackWithOptions” i kilka dodatkowych znaczników.
Carter Medlin

To nie zadziałało dla mnie w ASP.NET 4+, jednak odpowiedź Konstantina po prostu OnClientClick="return false"zadziałała.
TylerH

39
YourButton.Attributes.Add("onclick", "return false");

lub

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

15

Aby uniknąć ogłaszania zwrotnego, możesz użyć akcji kliknięcia jquery i funkcji PreventDefault ()

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


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

Jest to elegancka odpowiedź, ponieważ pozwala przetestować warunki do wyłączenia.
John Mott

1
Nigdy nie używaj PreventDefault, ponieważ spowoduje to zatrzymanie innych zdarzeń zależnych od tego zdarzenia -1
Piotr Kula

1
@ppumkin: disableDefault to świetny sposób na poinformowanie innych detektorów zdarzeń, że obsłużyłeś to zdarzenie, aby nie musieli tego robić. Myślę, że chodziło Ci o stopPropagation, co rzeczywiście uniemożliwia usłyszenie zdarzenia przez innych słuchaczy.
Sebbas

Yeaaaaaaaaaa. Nie. 4 lata później, a teraz stoję za tym jeszcze bardziej. Po prostu tego nie rób.
Piotr Kula

8

Rozważ to.

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

}
     </script>

6

Inni mają rację, że potrzebujesz oddzwonienia, aby zwrócić fałsz; jednak chciałbym dodać, że robienie tego przez ustawienie onclick jest brzydkim starym sposobem robienia rzeczy. Polecam przeczytać o dyskretnym javascript . Korzystanie z biblioteki, takiej jak jQuery, może ułatwić Ci życie, a HTML mniej powiązany z Twoim javascriptem (i jQuery jest teraz obsługiwany przez Microsoft !)


4

ASP.NET zawsze generuje asp:Buttonjako plik input type=submit.
Jeśli potrzebujesz przycisku, który nie robi posta, ale potrzebujesz kontroli nad elementem po stronie serwera, utwórz proste wejście HTML z atrybutami type=buttonirunat=server .

Jeśli wyłączysz działania związane z klikaniem OnClientClick=return false, nie będzie to robić po kliknięciu, chyba że utworzysz funkcję taką jak:

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

3

Nie podajesz, której wersji platformy .NET używasz.

Jeśli używasz wersji 2.0 lub nowszej, możesz użyć właściwości OnClientClick, aby wykonać funkcję JavaScript, gdy zostanie zgłoszone zdarzenie onclick przycisku.

Wszystko, co musisz zrobić, aby zapobiec wystąpieniu ogłaszania zwrotnego serwera, to powrót falsez wywołanej funkcji JavaScript.


3

dodatkowo dla zaakceptowanej odpowiedzi możesz użyć UseSubmitBehavior = "false" MSDN


ASP.NET dodaje; __doPostBack(do końca skryptu kliknięć klienta.
IvanH

3

W moim przypadku rozwiązałem dodawanie zwrotu w onClientClick:

Kod za

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

Powierzchnia projektowa

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

Jak uruchomić OnClickmetodę po tym.
5377037

2

możesz użyć kodu:

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

jeśli trzeba się poddać

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

Z walidacją

W tym przykładzie użyłem dwóch kontrolek ddli txtboxszczęśliwego kodowania

 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

Możesz do tego użyć JQuery

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

niż w JQuery

$("#btnID").click(function(e){e.preventDefault();})
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.