JQuery创建元素并使用.each()添加事件失败

时间:2015-11-21 10:54:08

标签: jquery each

原始html只有2个超链接。

我想

  1. 添加每个超链接后面的每个按钮。
  2. 当点击按钮显示每个超链接值时 如果我点击第一个按钮,将提示“ahref” 如果我点击第二个按钮,将提示“bhref”。
  3. 但结果是两个按钮警告“bhref”。

    <?php
    echo file_put_contents("test.txt","Hello World. Testing!");
    ?> 
    

2 个答案:

答案 0 :(得分:5)

您需要使用一些closure,例如:

$(document).ready(function () {
    $('a').each(function () {
        var get_href = $(this).attr("href");
        var new_ele = $("<button type='button'>test</button>");
        (function (get_href) {
            new_ele.click(function () {
                alert(get_href);
            });
        })(get_href);
        $(this).append(new_ele);
    });
});

-jsFiddle-

现在,如果您遇到关于闭包和each循环的这类问题,通常会有更好的方法来处理它。参见例如获得相同预期行为的其他方式:

$(document).ready(function () {
    var new_ele = $("<button type='button'>test</button>").on('click', function () {
        alert($(this).parent().attr('href'));
    });
    $('a').append(new_ele.clone(true));
});

答案 1 :(得分:0)

谷歌很多,“关闭”是如此难以理解,现在对我来说太难了。但我以其他方式弄清楚了。

只添加1“var”使其工作..
如果没有'var'定义变量,则表示您定义全局变量 全局变量只有1个引用, 这意味着 如果全局变量发生变化,则全部变化 即使那时的“href值”是正确的 如果我将变量视为对象,那么一切都有意义。

这就是为什么我总是得到最后一个href值。

我还是这种语言的新手。

$(document).ready(function () {
    $('a').each(function () {
        var get_href = $(this).attr("href");        
        new_ele = $("<button type='button'>test</button>");
        new_ele.click(function () {
            alert(get_href);
        });
        $(this).append(new_ele);            
    });
});