Je souhaite créer des éléments de liens dynamiques. J'ai créé une fonction qui crée un élément et attache une fonction onclick à elle:Ajout d'éléments dynamiques et définition d'une fonction onclick différente
for (var i = 7; i > 0; i--) {
var date = moment().add(-i, 'days')
var dateFormatted = date.format('YYYY-MM-DD');
// Magic happens here
divDates.appendChild(createLink('<a href="#">' + dateFormatted + '</a>',
function() { alert(dateFormatted); }));
}
function createLink(s, onClick) {
var a = document.createElement('a');
if (s.indexOf('target="_blank"') >= 0) {
a.target = '_blank';
}
var href = s.match(/href="([^"]*)/)[1];
var text = s.match(/>([^<]*)/)[1];
a.href = href;
a.title = text;
a.onclick = onClick;
a.appendChild(document.createTextNode(text));
return a;
}
Cependant, le alert(dateFormatted)
montre le même message, quel que je clique sur lien. Comment puis-je les faire travailler indépendamment?
Note de côté, au lieu de passer d'une chaîne HTML, et d'essayer de chercher pour information, juste passer un objet avec vos informations en tant que propriétés, par exemple '{href: 'http://link.com',target: '_ blank'} 'alors dans la fonction faire comme' a.href = s.href'. Ou utilisez [DOMParser] (https://developer.mozilla.org/en-US/docs/Web/API/DOMParser) pour générer l'élément à partir de la chaîne. –
La solution simple est d'utiliser le code OP et de remplacer la deuxième valeur passée dans l'appel à * createLink * avec '(function (value) {return function() {alert (valeur)}} (dateFormatted))' rompre la fermeture avec * dateFormatted *. – RobG