J'ai un problème avec la simulation d'un clic d'ancrage via jQuery: Pourquoi ma Thickbox apparaît-elle la première fois que je clique sur le bouton d'entrée, mais pas la deuxième ou la troisième fois?
Voici mon code:
<input onclick="$('#thickboxId').click();" type="button" value="Click me" />
<a id="thickboxId" href="myScript.php" class="thickbox" title="">Link</a>
Cela fonctionne toujours lorsque je clique directement sur le lien, mais pas si j'essaye d'activer la Thickbox via le bouton d'entrée. C'est en FF. Pour Chrome, cela semble fonctionner à chaque fois. Des indices?
Réponses:
Essayez d'éviter d'incruster vos appels jQuery comme ça. Mettez une balise de script en haut de la page pour se lier à l'
click
événement:Éditer:
Si vous essayez de simuler un utilisateur cliquant physiquement sur le lien, je ne pense pas que ce soit possible. Une solution de contournement serait de mettre à jour l'
click
événement du bouton pour changer lewindow.location
Javascript:Modifier 2:
Maintenant que je réalise que Thickbox est un widget d'interface utilisateur jQuery personnalisé, j'ai trouvé les instructions ici :
Instructions:
Créer un élément de lien (
<a href>
)Donnez au lien un attribut de classe avec une valeur de thickbox (
class="thickbox"
)Dans l'
href
attribut du lien, ajoutez l'ancre suivante:#TB_inline
Dans l'
href
attribut après le,#TB_inline
ajoutez la chaîne de requête suivante à l'ancre:? height = 300 & width = 300 & inlineId = myOnPageContent
Modifiez les valeurs de height, width et inlineId dans la requête en conséquence (inlineID est la valeur ID de l'élément qui contient le contenu que vous souhaitez afficher dans un ThickBox.
Facultativement, vous pouvez ajouter modal = true à la chaîne de requête (par exemple
#TB_inline?height=155&width=300&inlineId=hiddenModalContent&modal=true
) de sorte que la fermeture d'un ThickBox nécessitera d'appeler latb_remove()
fonction depuis le ThickBox. Consultez l'exemple de contenu modal masqué, dans lequel vous devez cliquer sur oui ou non pour fermer le ThickBox.la source
.prop()
au lieu deattr()
pour obtenir l'url résolue.Ce qui a fonctionné pour moi était:
la source
focus
place declick
:)[0]
indique le premier élément du tableau - un sélecteur renvoie 0 ou plusieurs éléments lorsqu'il est exécuté. C'est dommage que.click()
cela ne semble pas fonctionner directement ici car apparemment d'autres invocations sont appliquées à des collections d'éléments provenant de sélecteurs de manière cohérente dans le cadre.[0]
ou.get(0)
sont les mêmes. Ceux-ci utilisent la version DOM de l'élément, au lieu de la version jQuery. La.click()
fonction dans ce cas n'est pas l'événement de clic jQuery, mais l'événement natif.J'ai récemment trouvé comment déclencher un événement de clic de souris via jQuery.
la source
cette approche fonctionne sur Firefox, Chrome et IE. j'espère que cela aide quelqu'un:
la source
Bien que cette question soit très ancienne, j'ai trouvé quelque chose de plus facile à gérer cette tâche. Il s'agit du plugin jquery développé par l'équipe d'interface utilisateur jquery appelé simulate. vous pouvez l'inclure après jquery et ensuite vous pouvez faire quelque chose comme
fonctionne bien dans Chrome, Firefox, Opera et IE10.vous pouvez le télécharger à partir de https://github.com/eduardolundgren/jquery-simulate/blob/master/jquery.simulate.js
la source
simulate()
est qu'il envoie les événements jQuery et déclenche l'action native du navigateur. C'est maintenant la bonne réponse +1Le titre de la question dit "Comment puis-je simuler un clic d'ancrage dans jQuery?". Eh bien, vous pouvez utiliser les méthodes "trigger" ou "triggerHandler", comme ceci:
Pas testé, ce script réel, mais j'ai utilisé
trigger
et al avant, et ils ont bien fonctionné.METTRE À JOUR
triggerHandler
ne fait pas vraiment ce que l'OP veut. Je pense que 1421968 fournit la meilleure réponse à cette question.la source
Je suggère de regarder l'API Selenium pour voir comment ils déclenchent un clic sur un élément d'une manière compatible avec le navigateur:
Recherchez la
BrowserBot.prototype.triggerMouseEvent
fonction.la source
Je pense que vous pouvez utiliser:
Cela déclenchera facilement la fonction de clic, sans cliquer dessus.
la source
Avez-vous besoin de simuler un clic d'ancrage? Depuis le site Thickbox:
Si cela est acceptable, il devrait être aussi simple que de mettre la classe Thickbox sur l'entrée elle-même:
Sinon, je recommanderais d'utiliser Firebug et de placer un point d'arrêt dans la méthode onclick de l'élément d'ancrage pour voir s'il n'est déclenché qu'au premier clic.
Éditer:
D'accord, j'ai dû l'essayer pour moi-même et pour moi à peu près exactement votre code fonctionnait à la fois dans Chrome et Firefox:
La fenêtre apparaît que je clique sur l'entrée ou sur l'élément d'ancrage. Si le code ci-dessus fonctionne pour vous, je suggère que votre erreur se trouve ailleurs et que vous essayez d'isoler le problème.
Une autre possibilité est que nous utilisons différentes versions de jquery / thickbox. J'utilise ce que j'ai obtenu de la page Thickbox - jquery 1.3.2 et thickbox 3.1.
la source
Vous pouvez créer un formulaire via jQuery ou dans le code de la page HTML avec une action qui imite votre lien href:
<a id="anchor_link" href="somepath.php">click here</a>.
la source
Pour simuler un clic sur une ancre lors de l'atterrissage sur une page, je viens d'utiliser jQuery pour animer la propriété scrollTop dans
$(document).ready.
Pas besoin d'un déclencheur complexe, et cela fonctionne sur IE 6 et tous les autres navigateurs.la source
Si vous n'avez pas besoin d'utiliser JQuery, ce n'est pas le cas. J'ai eu des problèmes avec la fonction cross browser de
.click()
. J'utilise donc:la source
En Javascript, vous pouvez faire comme ça
et vous pouvez l'utiliser comme
la source
En utilisant le script de Jure, j'ai fait ceci, pour "cliquer" facilement sur autant d'éléments que vous le souhaitez.
Je viens de l'utiliser Google Reader sur plus de 1600 éléments et cela a parfaitement fonctionné (dans Firefox)!
la source
createEventObject
dans IE il s'agit plus de créer un objet événement à transmettre aux gestionnaires que de distribuer un événement synthétique. Les IE sontfireEvent
peut-être plus prochesdispatchEvent
, mais cela ne déclenchera que les écouteurs - pas les actions du navigateur par défaut. Cependant, dans IE, vous pouvez simplement appeler laclick
méthode.JQuery('#left').triggerHandler('click');
fonctionne très bien dans Firefox et IE7. Je ne l'ai pas testé sur d'autres navigateurs.Si vous souhaitez déclencher des clics d'utilisateurs automatiques, procédez comme suit:
la source
Cela ne fonctionne pas sur le navigateur natif Android pour cliquer sur "élément d'entrée (fichier) caché":
Mais cela fonctionne:
la source
En essayant de simuler un «clic» dans les tests unitaires avec le spinner de l'interface utilisateur jQuery, je n'ai pas réussi à faire fonctionner les réponses précédentes. En particulier, j'essayais de simuler la «rotation» de la sélection de la flèche vers le bas. J'ai regardé les tests unitaires de jQuery UI spinner et ils utilisent la méthode suivante, qui a fonctionné pour moi:
la source