如何将jquery Click事件应用于动态列表元素?

时间:2011-11-01 14:50:49

标签: javascript jquery html

我当前的设置加载了一个动态列表,此时我通过jquery创建了一个click事件,如下所示:

$('#listReports li').click(function () {
    var selected = $(this).text();
    alert("List Item: " + selected);
});

我有一些代码可以让用户保存一个附加到列表中的报告。在我再次调用该函数之前,列表中的新项不会触发单击事件。这个问题是旧事件被触发两次。

以下是我添加列表项并再次调用函数的方法:

            $("#save").click(function (e) {

                if ($("#reportParams li").size()> 0) {
                    var fileName = $('#reportFileName').val();

                    if (!fileName) {
                        alert("You must enter a file name!");
                    }
                    else {
                        $('#listReports').append('<li><a href="#">'+fileName+'</a></li>');

                        $('#listReports li').click(function () {
                            var selected = $(this).text();
                            alert("List Item: " + selected);
                        });
                    }
                }
            });

有没有办法只定义一次点击事件并让它影响列表中的新项目?

1 个答案:

答案 0 :(得分:4)

而不是.click(),请使用.live()

$('#listReports li').live('click', function ()
{
    var selected = $(this).text();
    alert("List Item: " + selected);
});

.delegate()

$('#listReports').delegate('li', 'click', function ()
{
    var selected = $(this).text();
    alert("List Item: " + selected);
});