7
votes

Bonne façon d'appeler une méthode javascript

Y a-t-il une raison pour laquelle je devrais appeler une méthode JavaScript comme suit? XXX Pré>

ou puis-je simplement appeler cela comme ceci: P>

onClick="MyMethod();"


5 commentaires

Utilisez onclick = "myMethod ();" . Ou mieux encore, déposez tout le JavaScript en ligne en faveur de l'attribution d'événements de clic après chargé DOM.


@Stephen: Pourquoi ne pas faire un exemple et poster cela comme solution?


Bonne idée! Réponse à venir.


De nos jours, les attributs doivent être minuscules (au moins xhtml au moins). Il est difficile de perdre certaines habitudes, mais essayez d'utiliser onclick .


@Kenneth J: La question est clairement indiquée et elle a attiré des réponses détaillées et précises. De plus, c'est probablement une question que beaucoup de programmeurs JavaScript ont eu lieu. Donc quel est le problème?


5 Réponses :


18
votes

La valeur d'un attribut onclick code> est un code, pas une URI, c'est correct (bien que ce n'est pas le seul moyen que vous puissiez le faire, voir tangente n ° 1 ci-dessous): XXX

Ceci est incorrect em> mais largement inoffensif: p> xxx pré>

Parfois, les gens pensent que ce dernier utilise le JavaScript code > Protocole, comme sur les liens, mais ce n'est pas le cas. Ça fait quelque chose d'autre entièrement. La langue du code dans l'attribut onclick code> est définie au niveau de la page (et par défaut à JavaScript), et donc ce que vous faites réellement indique une étiquette em> dans votre javascript code, puis appelant myMethod code>. JavaScript a des étiquettes (voir tangente n ° 2 ci-dessous), bien qu'elles ne soient pas utilisées beaucoup. P>

L'attribut onclick code> est totalement différent de l'attribut href code> sur les liens: p> xxx pré>

là, car nous mettons le code dans lequel une URI est attendue, nous devons spécifier une URI à l'aide du protocole code> JavaScript code>, Donc, le navigateur sait ce que nous faisons. JavaScript code> est un protocole (comme http code> ou mailto code>) que Brendan EICH (Créateur de JavaScript) était assez intelligent pour définir et s'enregistrer (et mettre en œuvre) Très, très tôt, il est donc bien soutenu. p>

Enfin: meilleur pour faire onclick code> Toutes les minuscules, non mixtes, bien que cela ne vraiment em> question si vous utilisez xhtml. p>


tangent # 1 strong> p>

Peut-être un peu de sujet, mais: Utilisation des attributs HTML pour raccorder les gestionnaires Est parfaitement valide et fonctionne bien entre le navigateur croisé, mais il compromet la connexion JavaScript Event avec votre HTML. Certaines personnes voient cela comme une bonne chose, d'autres appartiennent au côté "javascript discret" et pensent que vous devriez tout accrocher plus tard. Ce que vous faites, c'est à vous de décider. L'approche discrète est particulièrement utile lorsque vos concepteurs HTML et vos codeurs JavaScript ne sont pas les mêmes personnes (comme cela se produit fréquemment sur les grandes équipes). P>

L'approche non obstrisseuse dit essentiellement: N'utilisez pas les attributs HTML pour cette , faites-le plus tard de script. Donc au lieu de p> xxx pré>

, vous pourriez avoir ce HTML: p> xxx pré>

combiné avec ce JavaScript: p>

var innerIndex, outerIndex;

// Label the beginning of the outer loop with the (creative) label "outerloop"
outerloop: for (outerIndex = 0; outerIndex < 10; ++outerIndex) {

    for (innerIndex = 0; innerIndex < 50; ++innerIndex) {

        if (innerIndex > 3) {
            break; // Non-directed break, breaks inner loop
        }

        if (innerIndex > 2 && outerIndex > 1) {
            // Directed break, telling the code that we want to break
            // out of the inner loop *and* the outer loop both.
            break outerloop;
        }

        display(outerIndex + ":" + innerIndex);
    }
}


16 commentaires

Intéressant, car ASP.NET pourrait faire cela: href = "JavaScript: __ dopostback ('CTL00 $ MainContent $ GRDTEMPLATE $ CTL 16 $ LNK Commentaire', '')" "


ASP.NET fait beaucoup de choses.


Sont-ils corrects ou incorrects? Pourquoi Microsoft créerait-il ASP.NET Generate Code de cette façon, si ce n'est pas correct?


@Krummelz: Microsoft n'est pas tout à fait connu pour avoir adhéré aux normes.


@Krummelz - href = "JavaScript: MyMethod ();" est correct. onclick = "JavaScript: mymethod ();" n'est pas.


@Krummetz: href est différent de onclick . Comme cela se produit, je dessine la distinction comme vous l'avez commenté. La réponse mise à jour devrait donc aider. :-)


Prudent! Vous devez différencier entre le href et onclick attributs. href nécessite le JavaScript: pseudo-protocole pour savoir que c'est JavaScript et non une URL. OnClick n'en a pas besoin, car OnClick ne peut contenir que JavaScript et non une URL.


Notez que l'exemple ASP.NET utilise un JavaScript: pseudo-URL dans l'attribut href d'un lien, pas dans son événement OnClick. Cela fonctionne, mais c'est un grave non-non d'une perspective d'accessibilité; la façon de le faire avec un lien serait - et la préférence qu'il y aurait pour que le HRF soit réellement indiquer à une autre page qui peut gérer le cas de noscript.


href = "" n'est pas le même que onclick = "" . href = est un lien, puis vous avez besoin du JavaScript: pour le dire que vous souhaitez exécuter JavaScript et ne pas aller à une URL, alors que onclick = < / Code> est un gestionnaire d'événements qui présume JavaScript.


@Ellusive: assez vrai, mais ils sont avec ce href .


wow, merci gars! Explications géniales :) Stackoverflow FTW!


@ T.J. Crowder: Tu as raison;)


Umm ... Que diriez-vous de OnClick = MyMethod; ?


@Ates: Hey, pourquoi s'arrêter là-bas, allons descendre le AddeventListener / AttachEvent itinéraire! :-) Non, sérieusement, d'accord. La plupart (pas toutes) du temps, mieux pour attacher des gestionnaires séparément et éviter de mélanger votre JavaScript et HTML.


Techniquement, EICH n'a pas enregistré le système JavaScript: URL, il vient d'aller de l'avant et l'a utilisé (à l'origine comme moka: ). En effet, Netscape 2 a précédé le processus RFC2717. Oh, comment je souhaite n'avoir jamais inventé la maladie nauséabonde de JavaScript: URL. La désastre infini et inutile d'utilisation et de sécurité qu'ils ont causées ...


@Bobince: Nonsense! Sans JavaScript URL, nous n'aurions pas de banquette! Rejoignez-vous, tomate, tomatoh, il les a créés. :-)



2
votes

onclick présume déjà que vous exécutez le code JavaScript, il n'y a donc pas besoin d'un JavaScript: pseudo-URL.


0 commentaires

1
votes

afaik, vous définissez une étiquette de saut avec le nom JavaScript ici. Vous ne devriez pas faire ça. Cela ne fait aucune différence pour l'appel. C'est la voie à suivre: xxx


0 commentaires


10
votes

Voici une alternative discrète. Le code JavaScript en ligne rend votre HTML difficile à suivre. Séparer votre JavaScript (logique) à partir de votre HTML (présentation) est la voie à suivre. Dans JQuery, ce serait quelque chose comme ceci: xxx

mettre cela dans votre tête ou un fichier de script externe. De préférence où votre MyMethod est défini. Maintenant, votre élément est propre et tous vos appels de méthode sont situés au même endroit, plutôt que de se répandre via le HTML.


0 commentaires