0

在 javascript 中,$(document).ready(function()我有一个函数updateRecordTime()运行来更新列表项中的日期(带有嵌套的 div),并且我setInterval()每 30 秒运行一次该函数来更新,但是在通过 ajax 动态添加列表项之后,它们也不会更新。我有在静态元素上运行的函数来查看无序列表的列表项,但它不起作用,我无法弄清楚。

  updateRecordTime = function () {
      $('#record-lister > li').each(function (index) {
          var record_time = $(this).find('.record-time');
          date = moment(new Date(record_time.attr('data-date')));
          update = function () {
              record_time.html('Record - ' + date.fromNow() + ' <i class="icon-time"></i>');
          };
          update();
      });
  }

  updateRecordTime();
  setInterval(updaterecordTime, 30000);

html(相关代码)如下

<ul id="record-lister">
    <li>
         <div class="record-time" data-date="'.date('Y-m-d H:i:s', $timestamp).'">
              gets replaced with moment time....                                                            
         </div>
    </li>
    <li>
        <div class="record-time" data-date="'.date('Y-m-d H:i:s', $timestamp).'">
              gets replaced with moment time....                                                            
        </div>
    </li>
</ul>

如果我在成功调用 ajax 后调用该函数,它会更新一次,但循环找不到它,我知道setInterval()会循环原始列表项,但我怎样才能让它也找到动态添加的列表项呢?

4

1 回答 1

0

正如A.Wolf所说,您的代码应该找到新插入的 li 标签。

  1. 确保正确填充具有 id="record-lister" 的 ul 标记。您可以检查动态添加的 html 代码以确保这一点。
  2. 从浏览器控制台观察 js 错误,以便代码不会在某些时候中断。我推荐你使用 Firebug 或 Chrome 开发工具。
  3. 在调用 setInterval(funcName, interval) 时,您必须知道 funcName 是指向您的函数的指针,并且您必须注意函数范围。调用 setInterval("funcName()", interval) 将从全局范围(即 window.funcName )调用 funcName 。

根据您在此处提供的代码,这些是我的建议,假设通过 ajax 添加 html 代码效果很好,它应该可以正常工作。

于 2013-09-21T13:24:45.760 回答