jQuery里面的函数不起作用

时间:2015-07-27 00:04:48

标签: javascript jquery

setTimeout( myFunction, 1000 );
function myFunction() {
$('#content').delegate('#fileList', 'fileActionsReady',function(ev){
                var $fileList = ev.fileList.$fileList;
                $fileList.find('tr').each(function(){
                    $filename = $(this).attr('data-file');
                    $owner = $(this).attr('data-share-owner');  
                    $id = $(this).attr('data-id');
                    getState($id,$filename,$owner,"true");
  setTimeout( myFunction, 5000 );
}

正如您所看到的,我试图循环一个在我的页面中列出特定表的函数,然后它调用另一个函数来更新信息。 现在我在函数外部使用此代码时没有任何问题,但是当我把它放在函数中时它就停止工作了。 我是javascript的新手,所以我没有弄清楚搜索后的错误。

2 个答案:

答案 0 :(得分:1)

正如我在评论中所说的那样(在复制/粘贴发生在另一个答案之前),通过调用myFunction,你每隔5秒实际添加一个事件监听器,每次setTimeout触发时你这个:

function myFunction() {
    // this below adds an event listener every time
    $('#content').delegate('#fileList', 'fileActionsReady',function(ev){

我的建议是修改myFunction并使其成为fileActionReady回调函数(不确定它是一次还是连续触发)。所以你的最终代码应该是这样的:

$('#content').delegate('#fileList', 'fileActionsReady', myFunction);

function myFunction(ev) {
            var $fileList = ev.fileList.$fileList;
            $fileList.find('tr').each(function(){
                $filename = $(this).attr('data-file');
                $owner = $(this).attr('data-share-owner');  
                $id = $(this).attr('data-id');
                getState($id,$filename,$owner,"true");
            }
            setTimeout( function(){
                myFunction(ev)
            }, 5000 );
}

这段代码的作用是它从收到的第一个fileActionsReady事件开始,然后每5秒触发一次相同的函数。如果您不想等待活动,可以手动启动该功能,不要忘记传入文件列表数据(如果您确实需要)。

这是一个快速举例说明我的意思:



$('#content').on('fileActionsReady', '#fileList', myFunction);

function myFunction(ev) {
  $('#r').text('tick');
  setTimeout(function() {
    $('#r').text('');
  }, 2500)

  setTimeout(function() {
    myFunction(ev)
  }, 5000);
}

function fireEvent() {
  $('#fileList').trigger('fileActionsReady', [{
    count: 1
  }]);
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button onclick="fireEvent()">Fire Event</button>
<div id="r"></div>
<div id="content">
  <div id="fileList"></div>
</div>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

function myFunction() {
        $('#fileList tr').each(function(){
            $filename = $(this).attr('data-file');
            $owner = $(this).attr('data-share-owner');  
            $id = $(this).attr('data-id');
            getState($id,$filename,$owner,"true");
        });
        setTimeout( myFunction, 5000 );
}
setTimeout( myFunction, 1000 );