web-dev-qa-db-fra.com

JavaScript: appel de l'événement de clic d'une balise d'ancrage à partir de javascript

J'ai une page avec une balise d'ancrage. Dans mon JavaScript, je définis l'attribut HREF de la balise d'ancrage de manière dynamique en fonction de certaines conditions if-else Maintenant, je veux appeler l'événement click de la balise d'ancrage par programme. J'ai utilisé le code ci-dessous, mais n'a pas réussi.

var proxyImgSrc="CostMetrics.aspx?Model=" + model +"&KeepThis=true&TB_iframe=true&height=410&width=650";

document.getElementById("proxyAnchor").href=proxyImgSrc;
document.getElementById("proxyAnchor").onclick;

Quelqu'un peut-il me dire comment aller de l'avant? J'ai une implémentation de boîte à lumière jQuery (thickbox) sur ce lien.

Veuillez aviser. Merci d'avance.

19
Shyju

Si vous avez jQuery installé, pourquoi ne pas simplement faire ceci:

$('#proxyAnchor')[0].click();

Notez que nous utilisons [0] pour spécifier le premier élément. Le sélecteur jQuery renvoie une instance de jQuery et l'appel de click () sur cet appel uniquement appelle le gestionnaire javascript, pas le href. L'appel de click () sur l'élément réel (retourné par [0]) suivra le lien dans un href, etc.

Voir ici pour un exemple illustrant la différence: http://jsfiddle.net/8hyU9/

Pourquoi votre code original ne fonctionne-t-il pas? C'est probablement parce que vous appelez onclick et non onclick(). Sans la parenthèse, JavaScript renverra tout ce qui est affecté à la propriété onclick et ne tente pas de l'exécuter.

Essayez l'exemple simple suivant pour voir ce que je veux dire:

var f = function() { return "Hello"; };     
alert(f);
alert(f());

Le premier affichera le texte actuel de la fonction, tandis que le second affichera le mot "Bonjour" comme prévu.

67
samjudson

Vous devriez appeler click event comme ceci: 

document.getElementById("proxyAnchor").click();
// $('#proxyAnchor').click();

mais dans votre cas, vous devez définir l'emplacement de la fenêtre sur une page de redirection, si vous le souhaitez.

11
Canavar

Je crois que c'est ce que vous recherchez:

var proxyImgSrc="CostMetrics.aspx?Model=" + model +"&KeepThis=true&TB_iframe=true&height=410&width=650";
$("#proxyAnchor").attr('href', proxyImgSrc).trigger("click");;
1
karim79

Pour un changement de page immédiat, vous pouvez aussi faire ceci:

var proxyImgSrc= "CostMetrics.aspx?Model=" + model + "&KeepThis=true&TB_iframe=true&height=410&width=650";
window.location = proxyImgSrc;

Voici un exemple tiré de W3 Schools: http://www.w3schools.com/js/tryit.asp?filename=tryjs_location

1
Darren Torpey

Je pense que vous souhaitez invoquer l’événement click. Pas le "onClick". Veillez également à inclure la parenthèse () lorsque vous appelez une méthode. Ne confondez pas les méthodes (qui se terminent par (et)) avec des attributs et des propriétés qui ne se terminent pas par (et).

// Using jQuery - Which you tagged...
$("#proxyAnchor").attr("href", proxyImgSrc).click();
1
Sampson

Si vous recherchez une prise en charge d'IE, cet exemple ci-dessous peut vous aider: 

supposons que vous ayez le document blob dans l'objet réponse: 

                 var blob = new Blob([response.responseText], { type: headers['content-type'] });
            if (navigator.msSaveOrOpenBlob) {
                //Launches the associated application for a File or Blob saving for non webkit based browser such as safari or IE
                navigator.msSaveOrOpenBlob(blob, "cvSummary.xml");
            }
            else {
                //code for webkit based browser
                var link = document.createElement('a');
                document.body.appendChild(link);
                link.style = "display: none";
                var url = window.URL.createObjectURL(blob);
                link.href = window.URL.createObjectURL(blob);
                link.download = "cvSummary.xml";
                link.dataset.downloadurl = ["text/xml", link.download, link.href].join(':');
                link.click();
                window.URL.revokeObjectURL(url);
            }