2015-07-27 4 views
0
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, поэтому я не понял, что случилось после нескольких часов поиска.Функция jQuery внутри не работает

+0

что вы ожидаете именно? – neoDev

+0

Определите «не работает». Также обратите внимание, что 'delegate' устарел в течение некоторого времени. Вы всегда должны опасаться «этого» и что это значит в разных контекстах. –

+0

@DaveNewton Это просто ничего не делает. После делегирования ничего не происходит. Нет ошибки . На самом деле я не написал оригинальный код. Я просто зацикливаю его. –

ответ

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); 
+0

Спасибо, человек, но все еще не работает. Имеет ли значение, что я использую его внутри $ (document) .ready? –

+0

Нет, не следует. Вызывает ли это исключение в консоли? Может быть, 'getState' не определен – davcs86

+0

Какую версию owncloud вы используете? – davcs86

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>

Смежные вопросы