2013-10-02 8 views
21

Ist es möglich, die Eigenschaft onclientclick einer Schaltfläche zu verwenden, um eine clientseitige Prüfung durchzuführen. Wenn die Überprüfung true zurückgibt, feuern Sie das Ereignis onclick. Wenn der clientside check false zurückgibt, feuern Sie das Ereignis onclick nicht aus.Stoppen onclick von feuern, wenn onclientclick falsch ist?

Ist das möglich?

UPDATE:

Diese 2 Arbeit:

Stops the form from submitting: 
OnClientClick="return false;" 

Allows the form to submit: 
OnClientClick="return true;" 

Die nächsten 2 funktionieren nicht:

// in js script tag 
function mycheck() { 
    return false; 
} 

// in asp:button tag 
OnClientClick="return mycheck();" 

// in js script tag 
function mycheck() { 
    return true; 
} 

// in asp:button tag 
OnClientClick="return mycheck();" 

Es übermittelt das Formular beide Male.

Warum ist das?

+0

Bitte Siehe Update auf Frage mit was ich versucht habe. – oshirowanen

Antwort

36

Sie wollen return innerhalb OnClientClick hinzuzufügen, nachdem eine Funktion aufgerufen wird. Andernfalls wird die Schaltfläche zurückgesetzt, selbst wenn die Funktion false zurückgibt.

<asp:button ID="Button1" runat="server" OnClick="Button1_Click" 
    OnClientClick="return checkValidation()" Text="Submit" /> 

<script type="text/javascript"> 
    function checkValidation() { 
     return confirm('Everything ok?'); 
    } 
</script> 
+0

Bitte aktualisiere die Frage mit was ich versucht habe. – oshirowanen

+0

Ihr aktualisierter Code funktioniert. Sie können es testen, indem Sie ein neues aspx (ohne Masterseite) erstellen. Es könnte etwas mit Ihrem vorhandenen JavaScript-Code zu tun haben, der die mycheck-Funktion stört. – Win

+0

Danke Mann .. Du hast meine Zeit gerettet .. –

1

Ja, Sie können, In OnClientClick Funktionsaufruf Verwendung preventDefault()

function onclientClickFun(e) 
{ 
    if(!IsValidationSuccess) 
{ 
    e.preventDefault(); 
} 

} 

ODER

function onclientClickFun(e) 
{ 
    if(!IsValidationSuccess) 
{ 
    return false; 
} 

} 
+0

Bitte aktualisiere die Frage mit was ich versucht habe. – oshirowanen

7

Sicher. Wenn Sie return false in Ihrem OnClientClick verwenden, wird eine Navigation verhindert. Sie sind also Code würde wie folgt aussehen:

<asp:LinkButton runat="server" OnClientClick="if(!ValidatePage()) { return false;}" /> 
+0

Bitte siehe Update zu Frage mit was ich versucht habe. – oshirowanen

+0

@oshirowanen Ich erinnere mich ehrlich gesagt nicht genau, warum Sie explizit warum "Return false" in das "OnClientClick" setzen müssen. Wenn ich mich recht erinnere, hat das etwas mit der Kapselung zu tun, die ASP.NET mit Ihrem Code innerhalb des 'OnClientClick's macht, wenn es den tatsächlichen HTML- und Javascript-Code rendert. –

1

Ich stieß auch auf dieses Problem. Ich möchte nicht, dass OnClientClick = false auf jedem Linkbutton setzen muss. Mit einer einfachen Seite ist es einfacher, einen Anker zu verwenden und zu vermeiden, dass asp das href für dich füllt.

Dies ist jedoch nicht immer möglich. Eine einfache Schlussfolgerung ist einfach, den LinkButton zu erben und eine Variable wie AutoPostBack hinzuzufügen. Wenn false, überschreibe einfach die Ausgabe mit dem HTML oder füge das OnClientClick hinzu. Ich mag Inline-Tags nicht wirklich.

Viele Attribute sollten in einem ViewState behandelt werden, aber in diesem Fall denke ich, dass wir gut sind;

1

Im Server-Seite die Schaltfläche erstellen:

var button1 = new Button(); 
button1.ServerClick += new EventHandler(button1_ServerClick); 
button1.OnClientClick = SetJsForSaveBtn(); 
button1.Attributes.Add("UseSubmitBehavior", "false"); 
panel.Controls.Add(button1); 

// Enthält die Servercode

private void saveBtn_ServerClick(object sender, EventArgs e) 
{ 
    //do something if ClientClick returns true 
} 

// die JS-Code für die Seite enthält

LiteralControl js = new LiteralControl(); 
panel.Controls.Add(js); 
js.Text [email protected]"<script type='text/javascript'> 
$(document).ready(function(){ 
function CheckValidationOnClient(){ 
    if(!ValidatePage()){ 
    return false; 
    } 
    else{ 
    return true; 
    } 
}; 
}); 
</script> "; 

private string SetJsForSaveBtn() 
{ 
    var jsfunc = @" return CheckValidationOnClient()"; 
    return jsfunc ; 
} 
Verwandte Themen