28

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

$("#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

4 回答 4

78

将其更改为.on.delegate基于您正在使用的 jQuery 版本..

从 jQuery 1.7+ 开始

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

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

$(document).delegate('.fClick', 'click', function(){
    alert("hey!");
}); 
于 2012-08-21T13:04:40.867 回答
1

使用on代替click

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

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

于 2012-08-21T13:04:31.390 回答
0

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

于 2015-01-08T16:24:24.973 回答
0

维加所说的完全有效。有一个提示:我认为第二行有一个错误。可能您可以使用 addClass 方法,因为您不能将 id 或 class 放入渲染中。这是一个例子:

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

并且将添加该类,但我不确定您是否可以添加一个 id。

于 2015-03-26T16:20:45.223 回答