гравитационные формы jQuery.load в модальные

У меня есть форма контакта с гравитационными формами, которая находится на странице, но то, что я хочу, – это ссылка на сайт, которая откроет эту форму и покажет ее модально, на лету.

Один из способов сделать это – просто вставить форму в разметку со стороны шаблона, чтобы она уже существовала на каждой странице. Но это означает, что загружается множество разметки и скриптов gf, которые в большинстве случаев не должны быть там.

Поэтому я собрал несколько js, которые захватывают разметку формы со страницы и вставляет ее в DOM, загружает скрипты, а затем я показываю результаты в модуле twitter bootstrap.

Сторона представления вещей работает так, как ожидалось, но ни одна из условных логик js и т. Д. Не применяется. Я знаю, что js загружается, поскольку Im подает статус каждого скрипта в console.log – и Im получает «200» и никаких ошибок. Но его, как скрипты, не могут видеть форму или не создаются должным образом.

Чтобы проверить конец js, я также попытался загрузить ресурсы вручную в голову через:

<?php gravity_form_enqueue_scripts(1, true); ?> 

Но это тоже не работает.

Ниже приведен js Im, у кого есть какие-то идеи, как заставить это зажечь жизнь в форме? Есть ли обратный вызов, который я должен использовать?
Большое спасибо заранее – ben

 jQuery(document).ready(function(){ // load contact form with ajax jQuery(".contact_btn").click(function(){ jQuery.ajaxSetup ({ cache:false }); var ajax_load = "<img height='50px' width='50px' src='/assets/img/medloading.gif' class='tr_spinner' alt='loading...' style='align:center, top:50%' />"; var loadUrl = "/contact-3/"; // load the scripts dynamically jQuery.when( jQuery.getScript("/plugins/gravityforms/js/gravityforms.js?ver=1.7.6", function(data, textStatus, jqxhr) {console.log(jqxhr.status);}), // console logs to get confirmation that its loaded jQuery.getScript("/plugins/gravityforms/js/conditional_logic.js?ver=1.7.6", function(data, textStatus, jqxhr) {console.log(jqxhr.status);}), jQuery.getScript("/plugins/gravityforms/js/datepicker.js?ver=1.7.6", function(data, textStatus, jqxhr) {console.log(jqxhr.status);}), jQuery.getScript("/plugins/gravityforms/js/jquery.textareaCounter.plugin.js?ver=1.7.6", function(data, textStatus, jqxhr) {console.log(jqxhr.status);}), jQuery.getScript("/plugins/gravityforms/js/jquery.maskedinput-1.3.min.js?ver=1.7.6", function(data, textStatus, jqxhr) {console.log(jqxhr.status);}) ).then(function(){ // insert the content into the DOM jQuery("#contact-form .modal-body").html(ajax_load).load(loadUrl + " .entry-content"); // load it in the modal jQuery("#contact-form").modal({ keyboard: false, show: true, backdrop: true }); }); // hijack the <a> link return false; }); }); 

Solutions Collecting From Web of "гравитационные формы jQuery.load в модальные"

В итоге я получил ответ от команды разработчиков, которая предположила, что iframe – лучший подход:

Похоже, это вопрос времени. Ваша форма загружается в DOM после того, как документ уже загружен, так что это будет проблемой. Если честно, со всеми сложностями JS в Gravity Forms, я не уверен, что вы сможете заставить это работать. Я бы серьезно подумал об использовании iframe.

В то время, когда потребовалось вернуть этот ответ, я обнаружил, что в div, который я импортировал с использованием [.load()][1] отсутствовали все элементы сценария из исходного содержимого. Это связано с тем, что, хотя он явно не документирован, .load() удаляет любые встроенные скрипты, поэтому, пока разметка присутствовала, ни одна из прав на активацию не произошла.

Одно из решений (которое работает) состоит в том, чтобы упаковать содержимое из встроенных скриптов, посмотрев на источник страницы и [jQuery.getScripts()][3] его в файл js, который вы загружаете с помощью [jQuery.getScripts()][3] . В дополнение к удалению элементов <script></script> , вы также можете захотеть изменить любые пути, чтобы они были слишком относительными для смягчения проблем миграции.

Главным недостатком здесь является то, что, упаковав этот скрипт самостоятельно, он больше не принимает параметры с задней стороны и, скорее всего, будет ломаться, когда будут внесены изменения в форму. Он также испек в нескольких случаях обнаружения браузера.

Из-за этих ограничений и без метода динамического создания этих сценариев iframe действительно является способом выхода. Тем не менее, несомненно, будет возможно создать пользовательский класс, который выводит скрипты – его в значительной степени необходимо будет реорганизовать из содержимого form_display.php, поскольку большая часть того, что требуется, заблокирована под частными функциями. Я не нашел никаких доказательств в моих поисках кого-либо, кто пытался это сделать до сих пор.