При добавлении обработчиков кликов к элементам списка в jQuery все они запускаются сразу - PullRequest
1 голос
/ 28 июня 2011

В следующем коде я отображаю список проектов, каждый элемент которых при нажатии выполняет действие, относящееся к связанному с ним объекту проекта. Тем не менее, когда я запускаю код, все предупреждения сразу отображаются при загрузке страницы, а затем не отображаются при нажатии на элемент списка. Что я делаю не так?

var projects = (an array of project objects)

jQuery.each(projects, function(index, project) {
    jQuery("#project-list").append("<li "+classString+"><a>"+project.title+"</a></li>");
    jQuery("#project-list").find("li:last").click( function() {
                        alert(project.title);
                    });
    }); 

Ответы [ 2 ]

1 голос
/ 28 июня 2011

Я бы заподозрил дополнительную пару фигурных скобок:

(...).click(function() {
    //...
}()); // note the extra braces here

Это немедленно запускает ваш обработчик кликов и передает возвращаемое значение (undefined) в jQuery.click (что вызывает событие имитации клика, делаяничего) вместо привязки обработчика щелчка к событию щелчка.

1 голос
/ 28 июня 2011

Я смог вспомнить следующее, что, насколько мне известно, то, что вы пытаетесь сделать:

var projects = [{title:'Project 1'},{title:'Project 2'}];

$.each(projects, function(i){
  $("<a/>", { href:'#', text:projects[i].title })
    .click(function(e){alert( projects[i].title );})
    .wrap("<li></li>")
    .parent()
    .appendTo("#project-list");
});

Я просто угадал структуру объектов для ваших проектов, но вы могли изменить это,Я не уверен, почему ваши клики происходили автоматически;моя работа отлично в приведенном выше примере кода.Возможно, что-то еще вызывает их, чего нет в коде, который вы разместили здесь.

Онлайн-демонстрация: http://jsbin.com/uhixac/edit

...