2014-02-11 8 views
0

Допустим, у меня есть главная страница:Авто выполнение кода яваскрипта загружается динамически

<html> 
    // Blah blah blah 
    <button /> 
    // Blah blah blah 
<script type="text/javascript"> 
    // Nothing here 
</script> 
</html> 

Эта кнопка на главной странице открыть модальное со следующей структурой:

<div> 
    <!-- HTML Stuff --> 
</div> 
<script type='text/javascript'> 
    $(function() { 
    // hide stuff, show stuff 
    }); 
    function whatever() { 
    // do some stuff 
    } 
</script> 

Этот модальный загружается в мой DOM.
Вопрос:
Почему Функция whatever не может быть вызвана в контексте модального?
Например, если я имел select тег внутри модального и добавил eventListener к нему так, что при выстреле, он будет вызывать функцию whatever, как это:

$('#select').on('change', function() { 
    whatever(); 
}); 

Или даже:

<select onchange="whatever()" /> 

Если я перемещаю функцию на главную страницу, вне модальности она работает как шарм.
Имеет ли это какое-то отношение к выполняемому коду и теряет все ссылки при загрузке динамически?

+1

Вы должны показать нам больше ... Дайте нам пример того, как она не работает. – epascarello

+1

Просьба показать, как вы пытаетесь вызвать эту функцию. – kapa

+0

Почему бы вам не назвать any() из «успеха загрузки» -хорошим в вашей loadModal-рутине? – synthomat

ответ

2

ли вы попробовать что-то вроде этого (полу-псевдо-код ;-)

Modal:

function initModal() { 
    $('#select').on('change', function() { 
     whatever(); 
    }); 
} 

Главная страница:

$.get('modal.html').success(function() { 
    initModal(); 
}); 
+0

Это отличное решение проблемы, но я действительно хочу понять, почему возникла проблема. – MurifoX

+0

Собственно, ваш код должен работать. Посмотрите: http://synthomat.de/test/modal.html – synthomat

2

Проблема заключается в том, динамически загруженный скрипт выполняется до того, как html будет вставлен в DOM.

Посмотрите на мой ответ на How to append javascript block in a string into html?

+0

Хм, это приятно знать. Итак, вы говорите, что все будет выполнено, и ссылка на функцию не будет существовать, если я загружу ее так? – MurifoX

+0

Да, к сожалению, я заметил это с jQuery 1.4+ (afair), что скрипты удалены и больше не живут в глобальном пространстве javaScript. Поэтому, если вы хотите сделать что-то простое, вы можете уйти с '$ (document) .on (« change »,« #select », function() {});' или пользовательский init, который вызывается в $ .get callback, но для более общего подхода я сделал это с помощью трюка/взлома сценария стиля – metadings

Смежные вопросы