2015-05-04 3 views
3

После возврата к основному содержимому с помощью нагрузки ajax функция onload не запускалась. Я могу понять, почему, но как я могу заставить его работать в этом состоянии?Javascript onload после ajax loading

<script type="text/javascript"> 
     onload = function() { 
      if (!document.getElementsByTagName || !document.createTextNode) return; 
      var rows = document.getElementById('chat').getElementsByTagName('tr'); 
      for (i = 0; i < rows.length; i++) { 
       rows[i].onclick = function() { 
        $("#chat_main").load("chat", { 
         m: this.id, 
         ajax: 1 //here we are loading another page 
        }); 
       } 
      } 
     } 
    </script> 
    <script> 
     function return_to_main() { 
      $("#chat_main").load("chat", { 
       ajax: 1 //here we trying to load back main page 
      }); 
     } 
    </script> 

P.S.return_to_main() является переплетен на input type="button"

+0

'onload', похоже, не называется? – guest271314

+0

'onload = function' является ПЛОХОЙ практикой. Если вы хотите, чтобы ваш код находил новый контент, вам нужно повторно запустить код. – epascarello

+1

@ guest271314 это то же самое, что и 'window.onload = function() {}' – epascarello

ответ

0

Обратитесь к функции после запроса:

$("#chat_main").load("chat", { 
    ajax: 1 //here we trying to load back main page 
}).done(onload); // <-- 

Если .load не дает использовать обещание:

$("#chat_main").load("chat", { 
    ajax: 1 //here we trying to load back main page 
}, onload); // <-- 
+1

Я не думаю '.load' возвращает отложенный/jqXHR, поэтому' .done' здесь не будет работать. – sroes

+0

Если он не возвращает обещание, вы можете использовать третий параметр в качестве полного обратного вызова: '.load (" foo ", {}, onload);' – Halcyon

+0

Все еще не работает. – Aero

1

Вы связывание вызова window.onload. Он не волшебным образом вызывается при каждом обновлении содержимого страницы. Он называется только один раз. Вы должны вызывать функцию каждый раз, когда вы хотите, чтобы код работал. Поэтому, когда вызов Ajax завершен, вы должны были вызвать его.

НО Вы используете jQuery, чтобы использовать его.

Нет причин, по которым вам нужно будет привязываться к каждой строке таблицы. Используйте делегирование событий. Теперь, когда содержимое изменится, вы по-прежнему будете связаны с событиями.

$(function() { //document ready 
    var chatMain = $("#chat_main"); 
    chatMain.on("click", "table tbody tr", function() { //listen for clicks on table row 
     chatMain.load("chat", 
      { 
       m: this.id, 
       ajax: 1 //here we are loading another page 
      } 
     ); 
    }); 
});