Arrestare onclick dall’triggerszione quando onclientclick è falso?

È ansible utilizzare la proprietà onclientclick di un pulsante per eseguire un controllo client. Se il controllo restituisce true , quindi onclick evento onclick . Se il controllo lato client restituisce false , non onclick evento onclick .

È ansible?

AGGIORNARE:

Questi 2 funzionano:

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

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

I prossimi 2 non funzionano:

 // 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();" 

Sottopone il modulo entrambe le volte.

Perché?

Si desidera aggiungere il reso all’interno di OnClientClick dopo aver chiamato una funzione. In caso contrario, il pulsante verrà postback anche se la funzione restituisce false.

   

Sicuro. Se utilizzi return false all’interno di OnClientClick , impedirà la navigazione. Quindi il codice sarà simile a:

  

Sì, è ansible, nella chiamata alla funzione onclientClick, utilizzare preventDefault()

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

O

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

Nella pagina del server, crea il pulsante :

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

// Contiene il codice del server

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

// Contiene il codice JS per la pagina

 LiteralControl js = new LiteralControl(); panel.Controls.Add(js); js.Text [email protected]" "; private string SetJsForSaveBtn() { var jsfunc = @" return CheckValidationOnClient()"; return jsfunc ; } 

Mi sono imbattuto anche in questo problema. Non mi piace dover mettere OnClientClick = return false su ogni link button. Con una semplice pagina è semplicemente più semplice usare un’ancora ed evitare l’asp che riempie l’href per te.

Tuttavia, questo non è sempre ansible. Quindi una semplice conclusione è solo ereditare il LinkButton e aggiungere una variabile come AutoPostBack. se è falso, basta sovrascrivere l’output con l’html o aggiungere l’OnClientClick in. Non mi piacciono molto i tag in linea.

 namespace My.WebControls { [ToolboxData("<{0}:LinkButton runat=server ID=btn>"), ParseChildren(true), ToolboxItem(true)] public class LinkButton : System.Web.UI.WebControls.LinkButton { private bool _postback = true; [Bindable(true), Category("Behavior"), DefaultValue(true), Description("Gets or Sets the postback click behavior")] public bool AutoPostBack { get { return _postback; } set { _postback = value; } } protected override void Render(System.Web.UI.HtmlTextWriter writer) { if(!AutoPostBack){ this.OnClientClick = "return false"; } base.Render(writer); } } } 

Molti attributi dovrebbero essere gestiti in un ViewState ma in questo caso penso che siamo bravi;