2010-07-08 8 views
0

J'ai le code HTML suivant:HTML: Browser ouvre 2 onglets quand quelqu'un clique sur un lien sur mon site web?

<div onclick="window.open('http://example.com')" > 
<p>1234 Main St, New York, NY</p> 
<p>Price: $200,000/p> 
<p>4 Beds/3 Baths</p> 
<p>2000 sqft</p> 
<a href="http://example.com">More Info</a> 
</div> 

Si la personne passe au-dessus de la partie de la DIV qui n'est pas le lien hypertexte, il ouvre une seule fenêtre.

Si la personne clique sur le lien hypertexte dans la DIV, il ouvre 2 fenêtres (une pour la DIV et une pour le lien hypertexte).

Y a-t-il un moyen de contourner ce scénario de fenêtre d'ouverture 2x?

+1

Pourquoi l'onclick? Le lien ne suffira-t-il pas? –

+0

Ce comportement est attendu car vous avez une commande 'window.open' pour le parent' div'. Pourquoi fais-tu ça? –

+0

@Hal, c'est pour une liste immobilière très détaillée. Je ne veux pas que tout le texte (lit/bain/prix/sqft) soit un lien hypertexte. Je veux seulement que le "Plus d'infos" soit vu comme un hyper lien bleu. Mais ce que je veux faire est de rendre l'ensemble de la liste cliquable pour voir plus d'infos même s'ils ne cliquent pas sur l'hyperlien lui-même – TeddyR

Répondre

1

La solution simple:

<a href="http://example.com" onclick="return false;">More Info</a> 
0

Cela est dû au fait que l'événement click augmente. Il initie lorsque vous cliquez sur l'élément d'ancrage, que les bulles jusqu'à la div, et exécute aussi.

Vous devez capturer l'événement click dans le div (à l'aide d'une fonction), puis appeler la méthode stopPropagation de l'événement pour l'empêcher de bouillonner.

Plus d'informations sur l'événement bouillonnant ici: http://www.quirksmode.org/js/events_order.html

+0

cela semble prometteur mais comment le ferais-je avec l'onclick? Serait-ce ...? * Onclick = "if (! E) var e = fenêtre.événement; e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation(); window.open ('http://example.com')"* – TeddyR

+0

Le code que j'ai posté dans le commentaire ci-dessus ne fonctionne pas. Des idées? – TeddyR

+0

Juste pour être clair, j'ai essayé le code suivant et cela n'a pas fonctionné: *

....
* – TeddyR

1

Vous pouvez faire cliquable div en faisant le lien dans un élément de bloc avec css

div a { 
    display: block; 
} 
+0

Hmmm .. cela ne fonctionnerait que si le div a seulement un lien dedans. N'a pas vérifié le code entier correctement –

+0

Cela ne fonctionne pas. – TeddyR

0

Vous pouvez utiliser la même fonction à la fois la DIV et A HREF, et gérer l'ouverture à l'intérieur de cette fonction pour appeler la fenêtre une seule fois, cela va fonctionner. Edit: Si vous vous souciez au moins un peu de Search Engine Optimization, vous ne devriez pas utiliser cette légende pour le lien, mais plus quelque chose mentionnant le contenu de la page suivante, comme "Détails de la maison" ou mieux selon le contexte/look de la page.

+0

Je crois que c'est ce que suggère Peter Kruithof, mais je n'ai pas réussi à faire fonctionner le code. – TeddyR

0

je suis tombé sur la même question et s'il vous plaît don `t rire sur mon erreur stupide. Mais deux onglets ouvrais parce que j'ai un lien et ayant target = « _ blank » et appelant également une fonction aussi sur le même comme:

<pre> 
$('#foo').on('click',function(){ 
// some code 
window.open("https://www.google.com","_blank"); 
}); 

où j'ai également ajouté la cible _blank. J'ai enlevé l'attribut de cible de l'ancre et cela fonctionne bien pour moi. J'espère que vous ne faites pas la même chose.

Questions connexes