处理jQuery中附加元素的click事件

时间:2012-08-21 13:03:07

标签: jquery onclick append

我使用以下方法在页面中生成了一些元素。例如,

$("#button"+caption).click(function(){
        var firstDisplay = '<div id="firstDisp'+caption+'"><ul>';
        for(var i=0;i<parents.length;i++){
            firstDisplay=firstDisplay+'<li class="fClick">'+parents[i]+'</li>';
        }
        firstDisplay=firstDisplay+'</ul></div>';
        $(firstDisplay).dialog();
});

当我为'fClass'创建一个onclick事件时,如下所示:

$(".fClick").click(function(){
    alert("hey!");
}); 

它不起作用!但是,如果我把onclick函数放在其他函数中,就在.dialog()之后,它就可以工作了!我有很多以这种方式创建的元素,所以我不能将所有onclick事件放在一个方法中。有没有办法解决?我也遇到了与.append方法相同的问题。

4 个答案:

答案 0 :(得分:64)

根据您使用的jQuery版本将其更改为.on.delegate

从jQuery 1.7 +开始

$(document).on('click', '.fClick', function(){ 
    alert("hey!");
}); 

对于较旧的jQuery版本,请使用委托

$(document).delegate('.fClick', 'click', function(){
    alert("hey!");
}); 

答案 1 :(得分:0)

使用on代替click

$(".fClick").on('click',function(){
  alert("hey!");
}); 

click为您致电.fClick时出现的$('.fClick').click({...})元素添加了点击处理程序。稍后添加的新.fClick元素将不具有click事件。但是当您使用on时,所有.fClick元素都会有一个点击处理程序,即使它们稍后添加。
在此处阅读更多内容:http://api.jquery.com/on/

答案 2 :(得分:0)

再次调用$(document).ready(function()并在那里添加代码。 该文档再次被读取(刷新),您可以在那里应用您的代码。

答案 3 :(得分:0)

Vega所说的完全正常。 有一个提示: 我认为在第二行有一个错误。 可能你可以使用addClass方法,因为你不能在渲染中放入id或类。 这是一个例子:

var content = "<div>Hello, World</div>";
$("div").after(content);
$("last:div").addClass("mydiv");

该课程将被添加,但我不确定您是否可以添加ID。