使用AJAX / jquery加载内容,并且仍然可以在生成的DOM

时间:2016-04-25 16:03:22

标签: php jquery ajax

我创建了一个使用PHP动态创建的表。

基本上看起来像这样。

<table class="persist-area table table-bordered ">
    <thead>
        <tr class="persist-header">
          <th>1. th</th>
          <th>2. th</th>
          <th>3. th</th>
          <th>4. th</th>
        </tr>
      </thead>
      <tbody class="maintable">         
  <span class="genTable" id="<?php echo $partnerId ?>">
  </thead>
      <tbody class="maintable">         
      <span class="genTable" id="<?php echo $partnerId ?>">';

     <?php echo  $partner->genTable();?>

     </span>
     </tbody>
    </table>
    </div>
  </div>

我直接在我的partner.php文件中。

现在,我想创建一个AJAX函数,当你访问partner.php时加载这个表,这样我每次用户对表进行更改时都可以调用该函数。

所以我创建了这个javascript函数:

function  genTable(){
  $.ajax({ type: "POST",
            url: "resources/dialogs/genTable.php",
            data: {'partnerId': '1'},
        success: function(msg){
           $("div#gentable").html(msg);
        }});
}

因此,这会对我创建的新文件发出POST请求,该文件将返回与上面完全相同的表。

但现在我的其他javascripts不再适用于桌面了。 例如,我运行了另一个脚本,以使表标题在滚动时保持不变:

function UpdateTableHeaders() {

   $(".persist-area").each(function() {

       var el             = $(this),
           offset         = el.offset(),
           scrollTop      = $(window).scrollTop(),
           floatingHeader = $(".floatingHeader", this)

       if ((scrollTop > offset.top) && (scrollTop < offset.top + el.height())) {
           floatingHeader.css({
            "visibility": "visible"
           });
       } else {
           floatingHeader.css({
            "visibility": "hidden"
           });      
       };
   });
}

    // DOM Ready      
    $(function() {
       var clonedHeaderRow;

       $(".persist-area").each(function() {
           clonedHeaderRow = $(".persist-header", this);
           clonedHeaderRow
             .before(clonedHeaderRow.clone())
             .css("width", clonedHeaderRow.width())
             .addClass("floatingHeader");

       });


       $(window)
        .scroll(UpdateTableHeaders)
        .trigger("scroll");

    });

上面的代码只是一个例子。与表交互的所有其他javascripts也不起作用 - 有没有办法使我能够工作?

我认为它与如何加载东西有关?我应该使用livequery还是如何让我的其他脚本适用于AJAX生成的内容?

如上所述,如果我直接从partner.php文件加载表格,所有脚本都可以正常运行,但是当尝试使用AJAX加载它时,它会中断。

任何帮助将非常感谢。

1 个答案:

答案 0 :(得分:1)

这实际上比你想象的要简单。

您需要做的就是将您的监听器放在一个函数中,并在每次ajax加载完成时重新调用该函数。