JQuery单击事件内部的

JQuery单击事件内部的,jquery,Jquery,我真的不知道发生了什么事 代码如下: for (var j=0; j<tours.length; j++){ var name = tours[j].name; var $tourLI = $('<li id="'+name+'"></li>'); var $tourButton = $('<div class="button-inside"><span>'+name+'</span><span&g

我真的不知道发生了什么事

代码如下:

for (var j=0; j<tours.length; j++){
    var name = tours[j].name;

    var $tourLI = $('<li id="'+name+'"></li>');
    var $tourButton = $('<div class="button-inside"><span>'+name+'</span><span></span></div>');

    $tourButton.click(function() {
        alert(name);
    }
}

for(var j=0;j当点击被触发时,
j
将具有值
tours.length
。您可以通过闭包锁定循环值以及其余变量

for (var j=0; j<tours.length; j++){
  (function(){ 
    var currentJValue = j;
    var name = tours[currentJValue].name;

    var $tourLI = $('<li id="'+name+'"></li>');
    var $tourButton = $('<div class="button-inside"><span>'+name+'</span><span></span></div>');

    $tourButton.click(function() {
        alert(name);
    }
  })();
}

for(var j=0;j无需在循环内调用click事件..附加动态创建的按钮并在循环外调用它并在委托事件上使用

试试这个

 $(document).on('click','div.button-inside',function() {
    alert($(this).text());
}

如果您想阅读有关委托事件的更多信息,可以浏览…

在for循环继续之前,您需要将单击处理程序包装在一个闭包中,以“关闭”变量
name
的值

这是因为在单击处理程序之前,它不会实际执行,否则它将只使用当时的
name
当前值(无论循环中的最后一个值是什么)

for(var j=0;j试试这个

$('.div.button-inside ').on('click',function() {
    alert($(this).text());
}

这是因为当您单击按钮时,循环已完成。是否要将新按钮附加到文档中?是的,我希望如此..我将尝试以下示例。。
$('.div.button-inside ').on('click',function() {
    alert($(this).text());
}