Я работаю над веб-страницей, использующей jQuery. У меня есть вызов Ajax, который получает данные с сервера и обновляет div. Внутри этих данных есть функция jQuery, но функция не вызывается после загрузки данных на страницу. У меня уже есть соответствующие файлы js, включенные на страницу.
Вот что возвращается из вызова Ajax и помещается в div:
<script type = "text/javascript">
$(function() {
$('input').myFunction('param');
});
</script>
<p> other html </p>
Как мне запустить возвращенный javascript после того, как html будет вставлен на страницу?
(Я использую Rails с плагином jRails)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если вам нужна оценка тега JavaScript с содержимым html, вам следует установить для параметра dataType вызова ajax значение «html»:
$.ajax({
type: "GET",
url: "yourPage.htm",
dataType: "html"
});
Или dataType «script», если вы хотите загрузить и выполнить файл .js:
$.ajax({
type: "GET",
url: "test.js",
dataType: "script"
});
подробнее здесь: Ajax / jQuery.ajax
У меня была аналогичная проблема, когда я хотел добавить маленькие средства выбора даты jquery в пару полей, которые я получал через ajax. вот что я сделал, чтобы обойти это ... просто быстро и грязно. Вместо того, чтобы возвращать весь этот блок из моего вызова ajax:
<script type = "text/javascript">
$(function() {
$('input').myFunction('param');
});
</script>
<p> other html </p>
Я бы вернул это (обратите внимание на составленный разделитель | x |)
$(function() {
$('input').myFunction('param');
});
|x|
<p> other html </p>
Затем, когда я получил данные обратно через ajax, я разделил возвращаемое значение на 2 части: javascript для выполнения и html для отображения:
r = returnvalfromajax.split("|x|");
document.getElementById('whatever').innerHTML = r[1];
eval(r[0]);
Вы пробовали метод Sys.WebForms.PageRequestManager.add_endRequest?
$(document).ready(function()
{
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);
}
);
function endRequestHandler(sender, args)
{
// whatever
}
Ну, вы можете использовать функцию jQuery load (): http://docs.jquery.com/Ajax/load#urldatacallback В качестве обратного вызова вы можете определить функцию, которая будет выполняться после загрузки нового контента. пример:
$ ("# каналов"). load ("new_content.html" ,, doSomething ());
а в new_content.html вы можете определить функцию doSomething () ...
для ajax.net решение endRequestHandler(sender, args) работает нормально, хотя
Изменение
<script type = "text/javascript">
...
</script>
К:
<script>
...
</script>
Исправлена проблема для меня.