Voici ma situation. J'ai des liens sur tout le site Web. Certains d'entre eux ressemblent à ceci:
Et certains ressemblent à ceci: p> alors voici la chose. Je peux mettre à jour une fonctionnement (), mais je ne peux pas toucher les liens réels ou que JQuery. Ce dont j'ai besoin, c'est savoir que la valeur HREF du lien a cliqué. J'ai essayé d'utiliser ce qui suit dans un certain temps (): p> mais cela ne fonctionne pas. J'ai aussi essayé Edit: Pour être clair, je ne peux pas comme une solution courte ou même à moyen terme éditer L'appel à Quelque fichier code> p> p> P>
Quelque fichier code> p> p> < p> Tous les liens doivent appeler une certaine fonction () lorsque vous avez cliqué sur. Ceux qui ont l'appel dans l'attribut OnClick sont des pages de contenu Legacy. Les pages les plus récentes ont un événement de clic jQuery attaché à ceux-ci comme: p>
console.log (window.event) code> et obtenir rien, dit qu'il est indéfini. Aucune idée de ce qui me manque ici, ou est-ce essentiellement impossible sans transmettre une référence à cela lorsque la fonction est appelée? P>
de fonctionnement () code> dans l'ONCLICK ou dans le code JQuery Black, je ne peux donc pas les modifier à
TIXFUNCTION (CEL) CODE> ou similaire. Je ne suis pas sûr qu'il soit possible d'obtenir le href de l'intérieur de l'intérieur () sauf si je ne le fais si: ( p> p>
5 Réponses :
Vous n'avez besoin de rien d'autre que this.href code> à l'intérieur du
Cliquez sur CODE> Callback.
$(document).ready(function()
{
function someFunction(event)
{
console.log(this.href);
console.log(event);
}
$('a[href$=".pdf"]').click(function (event)
{
someFunction.apply(this, event);
});
});
OP a dit qu'il ne peut pas toucher la fonction de clic. Il a dit qu'il doit le faire en JavaScript mais sans modifier les 2 sections du code.
Il n'était pas complètement clair exactement i> ce qui ne peut pas être changé sur le code JQuery. Si rien ne peut être changé, il ne peut pas être fait.
Droite ... Je ne peux rien changer dans le codeblock de jquery ou l'appel onglick .. donc je ne peux donc pas simplement faire une fonction de fonctionnement (ceci); code> aussi, j'ai essayé de faire
console.log (ceci .href); code> à l'intérieur de la fonctionnement () et cela m'a aussi donné «indéfini»
Je ne suis pas d'accord. Voir ma réponse.
@MYSQL_NOOBIE_XXXXX (addendadum à mon commentaire précédent): Vous ne pouvez pas accéder à la valeur HREF CODE> HREF de l'élément cliqué dans
OFFONCTION CODE> sous une manière compatible entre navigation croisée sans changer Quelque chose B> Dans le bloc de code JQuery.
Oui. Le problème est que j'ai un client prêt à me permettre de changer cette fonction dans un fichier JavaScript, mais ne veut pas simplement changer le sélecteur de jQuery ou l'appel onclick qui est à la page, ne veut pas me laisser changer quoi que ce soit. fonction à ce moment :(
@MYSQL_NOOBIE_XXXXX Votre client semble stupide, déraisonnable et têtu. S'ils savent mieux que vous, pourquoi ne le font-ils pas eux-mêmes?
Ce n'est pas qu'ils soient stupides ou déraisonnables .. dans la plupart des ressources. Je peux leur fournir une nouvelle version de la fonction et ils peuvent appliquer suffisamment en 2s dans certains fichiers globaux. Mais pour changer le code sur la page sur toutes leurs pages ... nécessitera beaucoup plus de travail..quelque chose qu'ils "ne peuvent pas" faire à ce moment-là. Maintenant ... pourquoi ils ont duûr un tas de liens aléatoires et un code de jQuery sur un tas de pages en premier lieu ... LOL peut-être qu'il y a un peu de bêtise de leur part, car ils devaient maintenant jeter le "facile" options sur la porte.
Quoi qu'il en soit, j'ai donné un +1 pour effort, je suppose que je devrais simplement dire au client de le sucer, pas de joie avant de faire ce qui doit être fait: /
@MYSQL_NOOBIE_XXXXX de sorte qu'il va avec le code hérité. Je vis ce quotidien.
Utilisez soit this.href code>, ou plus jQuery approprié
$ (ceci) .attr ("href ') code> pour obtenir la valeur de chacun de vos liens. < / p>
Il n'y a absolument pas besoin d'utiliser .attr () code> dans ce cas.
this.href code> fonctionne dans tous les navigateurs et offre de meilleures performances et est significativement plus concis. Stackoverflow.com/a/4652402/139010
@ Mдγγбдll: J'étais sous l'impression que "plus anciennes" des versions d'IE (bien que je ne puisse pas me rappeler quelle i> versions) requises this.getattribute ("href") code> plutôt que le simple
this.href code>? Désolé, je ne peux pas fournir un soutien à cette compréhension, cependant ... juste une de ces choses que je croyais depuis si longtemps, je suppose. = /
@Davidthomas Je pourrais me tromper, car j'utilise cette réponse comme référence, mais je ne l'ai pas testé moi-même (je gère OS X au travail et à la maison, et une machine virtuelle ne vaut tout simplement pas la peine d'être effort).
@ MДγγбдll: Que puis-je dire? 'S a bon i> référence ..! Bien que je sois toujours curieux. Peut-être un travail pour demain, alors. Ou ... Chaque fois que je m'en souviens à ce sujet.
Ah, j'ai recommandé $ (this) .attr ('href') depuis que je me souviens de cela.href lancer des erreurs non définies dans les premières versions d'IE.
J'ai ajouté console.log (this.href); code> à l'intérieur de la fonctionnement () et il a dit "non défini" :(
ici ya va. Essaye ça. Ajustez en conséquence pour vos besoins (j'ai supprimé le lien PDF car on n'existait pas dans mon violon). P>
Modifier: Testé dans FF et Chrome. Laissez-moi savoir si cela fonctionne pour ya. P>
Hello Lazerblade: Je suis allé à votre lien (en utilisant la dernière version de FF) et Console journal me donne un message d'erreur "L'événement n'est pas défini"
Ouais, j'ai testé en chrome. Je verrai si je peux aller travailler à FF aussi, donnez-moi quelques minutes. Besoin de ajuster.
Afaik, fenêtre.event code> n'est pas compatible avec le navigateur croisé. Je suis surpris que cela fonctionne dans quoi que ce soit d'autre que c'est-à-dire, et je doute sérieusement que vous puissiez jamais utiliser
window.event code> dans Firefox.
Pas besoin de. Pensez en dehors de la boîte. Si vous ne pouvez pas capturer l'événement dans la première section du code car vous ne pouvez pas le changer, que faites-vous?
Les cerceaux que le code saute pour atteindre la compatibilité FF sont complètement inutiles, et vous toujours i> a changé le code de liaison d'événement JQuery. À ce rythme, vous pouvez aussi bien utiliser l'une des options (beaucoup plus propre) que j'ai présentées.
C'est-à-dire que cela nécessite beaucoup plus de cerceaux pour accomplir des choses dans CSS et JS que FF. Mais je me digresse. Oui, ma solution est volumineuse et nécessite beaucoup plus de code qu'il ne devrait. Vous seriez presque préférable de faire un remplacement sur tous les liens contenant du PDF dans le HREF et de les avoir sur une fonction différente. Mais tout ce qui fonctionne ...
"Tout ce qui fonctionne?" Cela fonctionne. B> la seule raison pour laquelle Ce mess travaille est parce que vous avez lié un deuxième gestionnaire d'événements, mais sérieusement, il n'est absolument pas nécessaire d'écrire une épave de code aussi de train. Cela lie également un second gestionnaire, , et est beaucoup plus clair, concis et maintenu. Je suis désolé, mais xkcd.com/386
Aie. Sauf que vous n'avez pas répondu à la demande de l'OP de ne pas modifier le document.Ready.
Je l'ai changé exactement autant que vous le faites - seul le sélecteur.
Oui. Le problème est que j'ai un client prêt à me permettre de changer cette fonction dans un fichier JavaScript, mais ne veut pas simplement changer le sélecteur JQuery ou l'appel onclick qui est à la page :(
Alors je laisse cela laisser mijoter pendant un moment et je suis arrivé avec une solution à court terme ... c'est assez hacon hacky et je me sens un peu sale pour le faire mais parfois tu dois faire ce que tu dois faire ce que tu dois faire quoi que tu puisses faire vous devez faire ... Quoi qu'il en soit, je pose ma version laide ici pour d'autres personnes qui pourraient être sauvegardées dans un coin similaire ...
Gardez à l'esprit, le seul code que je suis autorisé à toucher en op est le une fonction de fonctionnement () fonctionne elle-même. En outre, je peux ajouter du code supplémentaire au même endroit que celui où il se trouve, c'est ce que j'ai fait ... p>
Fondamentalement, la solution consiste à créer un auditeur de clic supplémentaire qui met la valeur HREF dans un Variable exposée à la fonction, et la poule enveloppe le code de fonctionnefonction () dans un petit délai d'attente pour vous assurer que la nouvelle fonction de clic peut faire sa chose. P>
<!-- STUFF I CAN'T TOUCH! (located on-page) --> <a target="_blank" onclick="someFunction()" href="/somFile.pdf">some file</a> <a target="_blank" href="/somFile.pdf">some file</a> <script type='text/javascript'> $(document).ready(function(){ $('a[href$=".pdf"]').click(function() { someFunction(); }); }); </script> <!-- END STUFF I CAN'T TOUCH! --> /*** STUFF I CAN TOUCH! (located in a script include) ***/ // hackjob! $(document).ready(function(){ $('a').click(function() { if ($(this).attr('href')) someFunction.href = $(this).attr('href'); }); }); function someFunction(a) { // more hackjob! window.setTimeout("console.log(someFunction.href);",200); } /*** END STUFF I CAN TOUCH!***/
Bonne idée. Juste deux Tweaks: 1. Réduisez le délai d'attente à 0. You Pas besoin de 200ms < / a> Et vous risquez de manquer de double-clics. 2. Ne sauvegardez pas le HREF sur OFFONCTION.HREF CODE>, utilisez simplement une variable dans une portée partagée.
ici il est en pure javascript
Mon violon fonctionne comme vous l'avez demandé. J'ai dû modifier vos blocs de code, mais seulement pour empêcher le lien d'essayer d'obtenir quelque chose et de conforme le reste du code en conséquence en raison du lien de référence PDF manquant.