Вызов JS-функции после вставки её AJAX-ом
После завершения аджакса вставляю скриптом:
$(divPreview).set('html',result.sText); (это Mootools, не jQuery, но один хрен) в DOM некий html код, содержащий в себе скрипт. Вставляется следующее в некий внешний div с id='divPreview' (и это видно на вкладке Elements хрома), собственно это и есть данные из result.sText: <div id="data_canvas1" style="position:relative; width:600px; height:480px;"></div> <script type="text/javascript"> window.addEvent("domready", function() { getTopicData("0,59", "data_canvas1"); }); function previewData1() { getTopicData("0,59", "data_canvas1"); }; </script> getTopicData - живая функция из внешнего *.js. Далее, следующей строчкой скрипта я пытаюсь вызвать только что вставленную функцию previewData1: window["previewData1"](); P.S. для страховки пробовал и явно previewData1(); - тот же результат Имею ошибку скрипта, дословно: Uncaught TypeError: Object [object DOMWindow] has no method 'previewData1' addEvent("domready"... здесь показан просто потому что он есть в пришедшем коде, но жить мешать не должен - domready уже был, и давно. Оставлен из-за совместимости с другими страницами и т.д. и т.п. Есть мысли почему функция не вызывается? Хром же её уже видит? |
Да, забыл сказать, новое содержимое видно в хроме до выполнения вызова - на вызове поставил брэкпоинт. Т.е. ошибка в любом случае - что с брэкпоинтом, что без.
|
Дальнейшее курево показало, что та часть, которая HTML, доступна из скрипта, т.е:
alert1($('data_canvas1').get('tag')); честно выдает 'div', но функция, которая по-видимому юзается скриптом из коллекции document.scripts, в эту коллекцию не попала. Надо как-то проапдейтить коллекцию скриптов... |
Похоже - это ж*па, даже на StackOverflow ничего не нашел. В моем случае пока вижу одно решение, если через скрипт ничего не передать (var x = "0,59"; var y = "data_canvas1"; - тоже будут недоступны), то аджаксом вместе с дивом присылать hidden input c данными, а потом скриптом их читать и и уже пихать в живую функцию.
|
Часовой пояс GMT +3, время: 06:36. |