Мои требования следующие:
div
, через Ajax.
)$('document').ready( ... )
частиУ меня есть функция JavaScript, которая вызвана, когда Ajax загружается. Я пытаюсь "обмануть его" в выполнение путем выполнения:
function AjaxLoaded() {
$('document').trigger('ready');
}
Это не сокращает его, я боюсь.
Я видел несколько ответы на Переполнении стека, которые "уклоняются" от этого вопроса путем изменения кода, который возвращается на Ajax (сделайте это функцией и назовите его после загрузки или просто удалите $(document).ready()
). Я должен подчеркнуть, что не могу изменить полученный код этого случая.
Если вы хотите, чтобы я создал способ заставить его работать.
Вот мой тест, который показывает, что он работает: http://www.antiyes.com/test/test2.php
вот соответствующий код:
<script>
// easy copy of an array
Array.prototype.copy = function() {
return [].concat(this);
};
// this function is added to jQuery, it allows access to the readylist
// it works for jQuery 1.3.2, it might break on future versions
$.getReadyList = function() {
if(this.readyList != null)
this.myreadylist = this.readyList.copy();
return this.myreadylist;
};
$(document).ready(function() {
alert("blah");
});
</script>
<script>
// this should be added last so it gets all the ready event
$(document).ready(function() {
readylist = $.getReadyList();
});
</script>
тогда в теле у меня:
<input type="button" onclick="$(readylist).each(function(){this();});" value="trigger ready" />
в основном я добавил в jQuery функцию, которая копирует readyList до того, как он будет очищен, затем он будет доступен для использования вами.
похоже, что код, приведенный ниже, не работает:
function AjaxLoaded() {
$(document).trigger('ready');
}
опустите кавычки вокруг документа
.
На всякий случай, если это кому-нибудь понадобится, я немного доработал решение Джона, чтобы его можно было использовать непосредственно как включенный файл javascript.
// jquery_trigger_ready.js
// this function is added to jQuery, it allows access to the readylist
// it works for jQuery 1.3.2, it might break on future versions
$.getReadyList = function() {
if(this.readyList != null) { this.myreadylist = [].concat(this.readyList); }
return this.myreadylist;
};
$(document).ready(function() {
readylist = $.getReadyList();
});
$.triggerReady = function() {
$(readylist).each(function(){this();});
}
Включение этого файла после включения jquery позволяет запускать ready, вызывая $.triggerReady()
. Пример:
<html>
<head>
<title>trigger ready event</title>
<script src="test2_files/jquery-1.js" type="text/javascript"></script>
<script src="jquery_trigger_ready.js" type="text/javascript"></script>
</head>
<body>
<input onclick="$.triggerReady();" value="trigger ready" type="button">
<script type="text/javascript">
$(document).ready(function(){
alert("blah");
});
</script>
</body>
</html>
Кстати, я хотел сделать его $(document).triggerReady()
. Если кто-то готов поделиться советом по этому поводу, буду признателен.
У нас была та же проблема, и мы решили ее другим способом.
Вместо
$(document).ready(function () {
$('.specialClass').click(....
Мы использовали:
$(document).bind('ready', function(event) {
$('.specialClass', event.target).click(..
jQuery, как обычно, инициирует событие «готово» к документу. Когда мы загружаем содержимое нового div через ajax, мы можем написать:
loadedDiv.trigger('ready')
И выполнить всю инициализацию только на div, получив то, что ожидалось.