2009-09-27 7 views
4

quand il y ajquery's .click() ne fonctionne pas?

<a href="javascript:onclick:alert('hi')"> click </a>. 

comment se $('a').click(); ne rend pas le message d'alerte?

+0

J'ai besoin de "cliquer" littéralement sur un élément. par exemple j'ai fait ce $ ('a'). trigger ('click'); ; clickme Rien ne s'est passé –

Répondre

4

Je pense que c'est ce que vous voulez:

<a href="#" onclick="alert('hi')"> click </a> 

Ensuite, pour déclencher manuellement:

$('a').trigger('click'); 
+0

oui. comment se fait-il que ça ne marche pas pour moi? également lorsqu'il existe réellement une URL href, pourquoi .trigger ('click') ne fait-il pas naviguer le navigateur? –

+0

Pourquoi ne pouvez-vous pas attacher le gestionnaire d'événements en externe, comme indiqué dans yoda et mes réponses? Les gestionnaires d'événements en ligne ne sont pas recommandés. –

+0

meder, je dois littéralement "cliquer" sur un élément. par exemple je l'ai fait $ ('a'). Trigger ('clic'); clickme Rien ne s'est passé .... –

1

La raison pour laquelle cela ne fonctionne pas est que vous n'attachez pas l'événement click correctement, vous le piratez en le plaçant dans la valeur href. Faites le lien vers # ou l'URL réelle, ne placez jamais JS en ligne. Ensuite, fixez le gestionnaire d'événements à l'extérieur:

$('a').click(function(e) { 
    e.preventDefault() 
    alert('hi')' 
}); 

déclencher ensuite avec .trigger('click') si vous avez besoin de le faire manuellement.

+0

Faites-vous également référence à onclick? Quel est le problème avec onclick? – recursive

+0

Il s'agit d'un gestionnaire d'événements en ligne et il est recommandé de séparer le contenu de la présentation, du comportement (tabouret à 3 pieds de conception Web). –

4

Que vous utilisiez javascript normal dans l'ancre ou que vous utilisiez jquery. Si vous voulez utiliser jquery, faites ceci:

$('a').click(function (e) { 
    e.preventDefault(); 
    alert('hi'); 
}); 

.. et supprimer le code que vous avez à l'intérieur href = "" à quelque chose d'autre, comme un href = "#"

+0

Cela ne résoudra pas le double-clic pour la première fois. –

+0

@JeanPaul ce n'était pas le point. – yoda

0

Le problème est votre href code. Il y a deux façons de faire un lien appeler une fonction javascript lorsqu'un utilisateur clique dessus:

<a href="javascript:alert('hi');">click</a> 
<a href="" onclick="alert('hi');">click</a> 

Maintenant, vous pouvez utiliser le code jquery de cliquer sur le lien.

1

La raison pour laquelle vous ne pouvez pas déclencher l'événement de clic est que vous ne définissez pas tout événement de clic. Le onclick: que vous avez dans le code n'a rien à voir avec l'événement onclick, c'est juste une étiquette. Le nommer comme un événement ne fait rien de particulier.

Ainsi, votre code est équivalent à:

<a href="javascript:alert('hi')"> click </a> 

Si vous voulez un événement, vous utilisez l'attribut onclick:

<a href="somepage.html" onclick="alert('hi');"> click </a> 
1

Il y a une façon de faire le travail de déclenchement, cliquez avec href . Vous devez lier un appel window.location en utilisant la cible d'événement à l'événement click. Cela provoquera le déclenchement des actions onclick, suivies de la cible href. Comme si:

$("a").click(function(event) { 
    window.location = event.target.href; 
}); 

$("a").trigger("click"); 
0

Il y a des cas que vous ne pouvez pas déplacer l'action href-onclick. (Comme ASP.NET republier boutons de lien) J'ai écrit la fonction au courant d'action href ci-dessous pour déclencher cliquez dans de tels cas:

function triggerClickEvent(element) { 
    var e = $(element).click(); 
    if (e.attr('href').indexOf('javascript:') === 0) 
     eval(e.attr('href').replace('javascript:', '')); 
}