Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 添加动态元素并为其设置不同的onclick函数_Javascript_Html_Dom - Fatal编程技术网

Javascript 添加动态元素并为其设置不同的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

我想创建动态链接元素。我创建了一个函数,该函数创建了一个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(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中断闭包。