JQuery. Live на событие загрузки

Или вы можете просто использовать OleDbDataAdapter для получения данных из Excel

16
задан Sean Vieira 22 October 2010 в 18:51
поделиться

7 ответов

Событие «DOM изменено» не существует, и его создание требует затрат браузера. Лучше всего использовать обратный вызов для метода загрузки, чтобы запускать необходимые функции.

$('#foobar').load('myurl.html',function() {
    var mydiv = $("#mydiv");
});
9
ответ дан 30 November 2019 в 21:02
поделиться

Вы это уже видели: http://plugins.jquery.com/project/livequery/

3
ответ дан 30 November 2019 в 21:02
поделиться

Например (расширяя мой комментарий выше) это из документации jQuery.

$.ajax({
  url: 'ajax/test.html',
  success: function(data) {
    $('#mydiv').html(data);
    alert('Load was performed.');
  }
});

замените предупреждение кодом, который вы хотите запустить / действие вы хотите выполнить

1
ответ дан 30 November 2019 в 21:02
поделиться

Другой способ сделать это - использовать trigger () для запуска ваше собственное событие (назовем его content_loaded ). load () принимает функцию обратного вызова, которую она вызывает по завершении:

function callback_function(responseText, textStatus, XMLHttpRequest) {
    //if we have valid data ...
    trigger("content_loaded");
}

$("your_selector").load("your_url", callback_function);

А затем просто настройте прослушиватель событий и запускайте его всякий раз, когда ваше событие запускается.

$("your_selector").bind("content_loaded", your_results_loaded_function);
11
ответ дан 30 November 2019 в 21:02
поделиться

Вы не можете использовать .live () с событием «load». См. Нерабочий пример того, что вы хотели бы сделать здесь: http://www.jsfiddle.net/S5L6Q/

Один из подходов - опрос с таймером:

var length = $(".mydiv").length;
setInterval(function () {
  if ($(".mydiv").length > length) {
    length = $(".mydiv").length;
    // .. some code
  }
}, 100);

Это будет проверять каждый 1/10 секунды, чтобы увидеть, были ли добавлены некоторые из них. Это может быть очень дорого в зависимости от сложности вашего селектора.

Другой вариант - перехватить все ваши вызовы AJAX через общую оболочку, которая может проверять длину и при необходимости выполнять ваш код, а затем выполнять предоставленный обратный вызов.

function myAjax(url, data, callback) {
  function fullCallback(data) {
    if ($(".mydiv").length > 0) {
      //... your code...
    }
    if (callback) {
      callback();
    }
  }
  $.get(url, data, fullCallback);
};

Второй, вероятно, лучший маршрут, но первый может быть самым простым.

2
ответ дан 30 November 2019 в 21:02
поделиться

Обычно я обрабатываю любые действия, которые происходят при загрузке элемента, либо как часть механизма обратного вызова AJAX, либо как часть включенного обработчика ready в возвращенном HTML-коде обратного вызова AJAX. Последний хорошо работает, когда вы хотите загрузить частичное представление на страницу и хотите сохранить код с самим частичным представлением.

Частичное представление:

<div id="myDiv">
  ...
</div>

<script type="text/javascript">
   $(function() {
       $('#myDiv').somePlugin( ... );
   });
</script>

Использование обратного вызова

$.ajax({
   url: '/example.com/code.php',
   success: function(html) {
          var container = $('#container').html(html);
          $('#myDiv',container).somePlugin( ... );
   }
});
1
ответ дан 30 November 2019 в 21:02
поделиться

Что создает #mydiv? Вы должны иметь возможность просто бросить //doSomething прямо рядом с функцией, которая создает #mydiv.

$.post("myURL.html", function(data){
  $("#mydiv").html(data);
  //doSomething

В конце концов, #mydiv не создает сам себя. Как бы вы ни создавали #mydiv, используйте ту же функцию, чтобы делать все, что вам нужно.

2
ответ дан 30 November 2019 в 21:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: