Javascript 添加动态元素并为其设置不同的onclick函数
我想创建动态链接元素。我创建了一个函数,该函数创建了一个a元素,并向其附加了一个onclick函数:Javascript 添加动态元素并为其设置不同的onclick函数,javascript,html,dom,Javascript,Html,Dom,我想创建动态链接元素。我创建了一个函数,该函数创建了一个a元素,并向其附加了一个onclick函数: 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(cre
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;
}
for(变量i=7;i>0;i--){
var date=moment().添加(-i,'天')
var dateFormatted=date.format('YYYY-MM-DD');
//魔法在这里发生
divDates.appendChild(createLink(“”,
函数(){alert(dateFormatted);});
}
函数createLink(s,onClick){
var a=document.createElement('a');
如果(s.indexOf('target=“_blank””)>=0){
a、 目标='u blank';
}
var href=s.match(/href=“([^”]*)/)[1];
var text=s.match(/>([^尝试以下方法:
for (var i = 7; i > 0; i--) {
(function (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); }));
})(i);
}
for(变量i=7;i>0;i--){
(职能(一){
var date=moment().添加(-i,'天')
var dateFormatted=date.format('YYYY-MM-DD');
//魔法在这里发生
divDates.appendChild(createLink(“”,
函数(){alert(dateFormatted);});
})(i) );
}
谢谢,它很管用,但我不明白其中的微妙之处……你能解释一下吗?:)Patrick Evans已经回答了您在哪里可以找到信息这不是一个好的解决方案,问题是dateFormatted,而不是i。它在闭包中保留了比所需多得多的内容。在现代浏览器中,原始代码中的let dateFormatted=…
将解决此问题。iLife仅适用于较旧的浏览器,并且只应“unclose”dateFormatted。这是理解“发生了什么”的好方法,因为问题开始于此var date=moment()。添加(-i,'days')
。请注意,不要传递html字符串并尝试搜索它的信息,只需传递一个对象,将您的信息作为属性,即{href:'http://link.com,target:“_blank”}
然后在函数中执行类似于a.href=s.href
。或者使用从字符串生成元素。简单的解决方案是使用操作代码并将调用createLink时传递的第二个值替换为(函数(值){return function(){alert(值)}(日期格式))
使用dateFormatted中断闭包。