OnClick vs OnClientClick pour un asp: CheckBox?

voix
81

Est-ce que quelqu'un sait pourquoi un gestionnaire javascript côté client pour asp: CheckBox doit être un onclick = « » attribut plutôt que d'un OnClientClick = « » attribut, comme pour asp: Bouton?

Par exemple, cela fonctionne:

<asp:CheckBox runat=server OnClick=alert(this.checked); />

et cela ne (pas d'erreur):

<asp:CheckBox runat=server OnClientClick=alert(this.checked); />

mais cela fonctionne:

<asp:Button runat=server OnClientClick=alert('Hi'); />

et cela ne (erreur de compilation de temps):

<asp:Button runat=server OnClick=alert('hi'); />

(Je sais ce que Button.OnClick est pour, je me demande pourquoi CheckBox ne fonctionne pas de la même façon ...)

Créé 16/07/2009 à 03:27
source utilisateur
Dans d'autres langues...                            


8 réponses

voix
8

Vous avez raison cela est incompatible. Ce qui se passe est que CheckBox ne disposeraient pas d' un événement OnClick côté serveur, de sorte que votre balisage se rend au navigateur. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox_events.aspx

Alors que le bouton a une Surclic - si ASP.NET attend une référence à un événement dans votre balisage onclick.

Créé 16/07/2009 à 03:34
source utilisateur

voix
98

Cela est très bizarre. J'ai vérifié la page de documentation CheckBox qui se lit

<asp:CheckBox id="CheckBox1" 
     AutoPostBack="True|False"
     Text="Label"
     TextAlign="Right|Left"
     Checked="True|False"
     OnCheckedChanged="OnCheckedChangedMethod"
     runat="server"/>

Comme vous pouvez le voir, il n'y a pas OnClick ou attributs OnClientClick définis.

En gardant cela à l'esprit, je pense que c'est ce qui se passe.

Lorsque vous faites cela,

<asp:CheckBox runat="server" OnClick="alert(this.checked);" />

ASP.NET ne modifie pas l'attribut OnClick et il rend tout comme sur le navigateur. Il serait rendu comme:

  <input type="checkbox" OnClick="alert(this.checked);" />

De toute évidence, un navigateur peut comprendre « onClick » et met une alerte.

Et dans ce scénario

<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />

Encore une fois, ASP.NET ne changera pas l'attribut OnClientClick et le rendre aussi

<input type="checkbox" OnClientClick="alert(this.checked);" />

Comme navigateur ne comprendra pas OnClientClick rien ne se passera. Il ne sera pas augmenter aussi toute erreur car il est juste un autre attribut.

Vous pouvez confirmer ci-dessus en regardant le rendu HTML.

Et oui, ce n'est pas intuitive du tout.

Créé 16/07/2009 à 03:35
source utilisateur

voix
8

Parce qu'ils sont deux types de contrôles différents ...

Vous voyez, votre navigateur web ne connaît pas la programmation côté serveur. il ne connaît que son propre modèle DOM et l'événement qu'il utilise ... Et les événements de clic des objets qui lui sont rendus. Vous devriez examiner le balisage final qui est effectivement envoyé au navigateur de ASP.Net pour voir les différences de votre auto.

<asp:CheckBox runat="server" OnClick="alert(this.checked);" />

rend à

<input type="check" OnClick="alert(this.checked);" />

et

<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />

rend à

<input type="check" OnClientClick="alert(this.checked);" />

Maintenant, autant que je me souvienne, il n'y a pas des navigateurs partout qui prennent en charge l'événement « OnClientClick » dans leur DOM ...

En cas de doute, consultez toujours la source de la sortie car il est envoyé au navigateur ... il y a un monde d'informations de débogage que vous pouvez voir.

Créé 16/07/2009 à 03:39
source utilisateur

voix
1

Je nettoyais les avertissements et les messages et voir que VS n'avertit à ce sujet: Validation (ASP.Net): L'attribut « OnClick » est pas un attribut valide de l'élément « CheckBox ». Utilisez la commande d'entrée html pour spécifier un gestionnaire côté client et vous ne pourrez pas obtenir la balise span supplémentaire et les deux éléments.

Créé 03/10/2010 à 21:56
source utilisateur

voix
5

Pour ceux d' entre vous qui suis arrivé ici à la recherche du côté serveur OnClickgestionnaire estOnCheckedChanged

Créé 29/11/2012 à 17:00
source utilisateur

voix
-1

Une solution est avec JQuery:

$(document).ready(
    function () {
        $('#mycheckboxId').click(function () {
               // here the action or function to call
        });
    }
);
Créé 19/01/2015 à 16:17
source utilisateur

voix
0

Vous pouvez faire le tag comme ceci:

<asp:CheckBox runat="server" ID="ckRouteNow" Text="Send Now" OnClick="checkchanged(this)" />

La propriété .checked dans le code JavaScript appelé sera correct ... l'état actuel de la case à cocher:

  function checkchanged(obj) {
      alert(obj.checked)
  }
Créé 14/02/2018 à 21:28
source utilisateur

voix
0

Asp.net CheckBox ne supporte pas la méthode OnClientClick.
Si vous voulez ajouter un peu de javascript événement asp: CheckBox vous devez ajouter des attributs connexes sur « Pre_Render » ou sur les événements de « Page_Load » dans le code du serveur:

C #:

    private void Page_Load(object sender, EventArgs e)
    {
        SomeCheckBoxId.Attributes["onclick"] = "MyJavaScriptMethod(this);";
    }

Remarque: Assurez-vous de ne « false » définissez pas AutoEventWireup = en-tête de page.

VB:

    Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SomeCheckBoxId.Attributes("onclick") = "MyJavaScriptMethod(this);"
    End Sub
Créé 19/12/2018 à 12:29
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more