2013-08-16 2 views
3

J'ai utilisé document.activeElement.href pour obtenir l'emplacement cible de l'étiquette cliquée. Sa propriété fonctionnait dans firefox, mais ne fonctionnait pas en chrome.document.activeElement.href ne fonctionnant pas en chrome

Je souhaite obtenir l'emplacement "href" d'un élément (actif) cliqué dans une autre fonction en dehors de celui-ci.

comme ceci:

function animate() { 
    alert(document.activeElement.href); //not working in chrome 
}); 

Merci beaucoup

EDIT: Se souvenir que je ne veux pas utiliser « ceci » ou $ (ce) parce qu'il ne fonctionne pas dans une fonction en dehors de l'élément . Je sais que je peux utiliser onclick="...." puis utiliser "$(this)" pour chaque élément mais je ne veux pas cela.

Ma question est simple:

puis-je obtenir cliqué (actif) elementID dans une fonction en dehors de celui-ci? (sauf dans firefox)

+0

@Liam, votre lien dit 'activeElement' est supporté par Chrome 2 et plus tard (MDN [dit la même chose] (https://developer.mozilla.org/en-US/docs/Web/API/document.activeElement), la réponse acceptée en disant Chrome 9+ est un pparemment une erreur). –

+0

@ FrédéricHamidi, désolé doit le mal lire. Mon mauvais – Liam

+0

@Nader, est-il possible que vous mettiez l'accent sur un autre élément avant d'appeler 'animate()'? –

Répondre

2

Voici une solution en utilisant addEventListener de Vanilla JS

document.addEventListener('click', function (e) { 
    var elm = e.target; 
    if (elm && elm.nodeType === 1 && elm.nodeName === 'A') { 
     alert(elm.href); 
    } 
}); 
+0

+1 pour Vanilla JS, le JS le plus puissant de tous! Même jQuery l'utilise! : D –

+0

@Kolink, mais 'nodeName' est-il garanti pour renvoyer un nom d'élément majuscule sur toutes les implémentations? Je voudrais appliquer 'toUpperCase()' pour être sûr, mais en utilisant une bibliothèque non-vanilla me cacherait en premier lieu;) –

+0

'nodeName' est le nom majuscule de la balise (sur les nœuds de l'élément, qui a été établi avec 'nodeType === 1'), c'est comme ça que c'est défini. –

1

vous pouvez le faire avec jQuery

$(document).on('click', 'a', function() { 
     alert($(this).attr('href')); 
}); 

cela ne dépend que lorsque vous appelez réellement votre événement. Vous n'avez pas spécifié cela, donc c'est difficile à dire.

+2

Vous n'avez pas besoin d'un wrapper prêt dans ce cas. – ThiefMaster

+0

@ThiefMaster, vraiment pourquoi? Comment pourrais-je garantir que jquery a été chargé sans le prêt? – Liam

+0

@Liam, 'document' existe toujours et' on() 'délègue l'événement. Ce type de liaison fonctionnera même si le DOM n'est pas prêt (mais pas si jQuery n'est pas chargé, bien sûr). –

2

Cet élément serait concentré alors

$("a:focus").prop("href") 

http://jsfiddle.net/kYJ3n/

+0

Bonne idée, étant donné ': focus' est explicitement documenté comme n'étant pas équivalent à' $ (document.activeElement) '. –

+2

Merci, mais ce n'est pas travaillé! Vous pouvez utiliser alert ($ ("a: focus"). prop ("href")); et voir ne pas travailler en chrome et safari;) – Nader

+0

@Nader simplement ajouter tabindex à votre élément;) [http://jsfiddle.net/kYJ3n/1/](http://jsfiddle.net/kYJ3n/1/) – rps

Questions connexes