Не работает модальное окно в подгружаемой вкладке.
Привет всем! Возникла сложность не знаю как решить... Есть страница в которой две вкладки реализованой через Jquery UI tabs одна из которых (вторая) подгружает во вкладку страничку через Ajax. Так вот конструкция
<a id="open_dialog_new_position" href="#"><img align="top" src="/tdt/images/document-import.png"></a> <div id="dialog_new_position"> проверка </div> размещенная в первой вкладке работает нормально, она же размещенная в подгружаемой страничке не работает совсем, т.е. я на второй странице вижу и ссылку и надпись "проверка", естественно при клике на ссылку ничего не происходит... Подскажите как победить проблему если кто сталкивался. Заранее спасибо. |
Arey,
Аякс загрузку нужно делать через чистый Aякс responseText Либо отдельно подгрузить (или сразу установить скрипты) для подгружаемой вкладки, обычный get или load скрипты отсекает Если скрипты уже стоят на странице - то 1. Можно их переинициализировать по загрузке вкладке(скорей всего у Вас события в скрипте не live) 2. Любо прописываем через "Живые события" on или live |
Цитата:
Если я правильно понял, то проблема в том что у меня появляются дивы которые долны быть обработаны до момента загрузки страницы и появление новых блоков которым должны быть присвоены соответсвующие параметры, в частности hide на модальное окно происходит после того, как собственно уже все присвоено, и так как нет никаких событий позволяющих это сделать заново и присвоить эти параметры то окно видно. Я правильно понял? Если да то насколько я понял после загрузки страницы на сделать что-то типа "перезапуска" куска кода? Если логика верна подскажите пожалуйста как это лучше сделать. |
Arey,
Если скрипты уже стоят на странице(а не подгружаются с контентом - то события им нужно прописывать либо через live, либо через on в версиях более 1.7.0 live для старых версий => http://jquery-docs.ru/Events/live/#typefn |
Цитата:
$(function(){ $("#dialog_new_position").dialog({ autoOpen: false, modal: true, title: 'Новая позиция' }); $("#open_dialog_new_position").click(function(){ $("#dialog_new_position").dialog("open"); }); $("#close_dialog_new_position").click(function(){ $("#dialog_new_position").dialog("close"); }); }); в погружаемой странице есть <a id="open_dialog_new_position" href="#">проверить</a> <div id="dialog_new_position"> проверка </div> |
Цитата:
|
1.8 самая свежая
|
$(function(){ $("#dialog_new_position").dialog({ autoOpen: false, modal: true, title: 'Новая позиция' }); $("#open_dialog_new_position").on('click',function(){ $("#dialog_new_position").dialog("open"); }); $("#close_dialog_new_position").on('click',function(){ $("#dialog_new_position").dialog("close"); }); }); |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
Arey,
Инет ссыль живая - есть ? |
Нет, но постараюсь до вечера слепить страничку и выкинуть куда-нибудь
|
Извиняюсь что долго молчал, что-то работай завалило... по ссылке ниже тестовая страница, на первой вкладке подгружаемая страница, форма сверху не прячется, на второй так как должно работать (надо нажать на значок рядом с надписью "Партия")...
http://bt-sale.ru/test/index.html Это один и тот же кусок, только первая вкладка подгружается из lot_list.html, а вторая находиться в index.html |
Arey,
1. Замените Контент Подгружаемого Скриптa: <script type="text/javascript" src="supply.js"></script> //формирует вкладки $("#tabs").tabs({ ajaxOptions:{ error: function( xhr, status, index, anchor ) { $( anchor.hash ).html("Содержимое не найдено :("); } } }); /* //формирует вкладки $("#tabs1").tabs({ ajaxOptions:{ error: function( xhr, status, index, anchor ) { $( anchor.hash ).html("Содержимое не найдено :("); }); } }); */ //показывает форму "Новая партия" $(function(){ $("#dialog_new_lot").dialog({ autoOpen: false, modal: true, title: 'Новая партия' }); $("#open_dialog_new_lot").click(function(){ $("#dialog_new_lot").dialog("open"); }); $("#close_dialog_new_lot").click(function(){ $("#dialog_new_lot").dialog("close"); }); }); //показывает форму "Новая партия" $(function(){ $("#dialog_new_lot1").dialog({ autoOpen: false, modal: true, title: 'Новая партия' }); $("#open_dialog_new_lot1").click(function(){ $("#dialog_new_lot1").dialog("open"); }); $("#close_dialog_new_lot1").click(function(){ $("#dialog_new_lot1").dialog("close"); }); }); |
Arey,
C этими двумя фишками - что-то напудрено: //формирует вкладки $("#tabs").tabs({ ajaxOptions:{ error: function( xhr, status, index, anchor ) { $( anchor.hash ).html("Содержимое не найдено :("); } } }); /* //формирует вкладки $("#tabs1").tabs({ ajaxOptions:{ error: function( xhr, status, index, anchor ) { $( anchor.hash ).html("Содержимое не найдено :("); }); } }); Не наю таких методов Есть вроде Цитата:
|
Цитата:
Цитата:
http://jquery.page2page.ru/index.php...D0%BA%D0%B8_UI Вроде все работает, ajaxOptions во вкладке "свойства" сам кусок кода взят от туда же если нажать на надпись "Ajax" рядом с примером, а потом на ссылку "показать исходный код" над примером то там все можно увидеть... Сильно подозреваю что в подгружаемой вкладке не работает или Jquery или Jquiey UI, а может и то и другое... |
<html xmlns="http://www.w3.org/1999/xhtml"><head> <meta http-equiv="content-type" content="text/html; charset=windows-1251"> <meta http-equiv="Cache-Control" content="no-cache"> <meta http-equiv="Pragma" content="no-cache"> <link rel="SHORTCUT ICON" href="http://www.bt-sale.ru/favicon.ico"> <link href="http://bt-sale.ru/test/style_tdt.css" media="screen" rel="stylesheet" type="text/css"> <link type="text/css" href="http://bt-sale.ru/test/jquery-ui-1.8.23.custom.css" rel="stylesheet"> <script type="text/javascript" src="http://bt-sale.ru/test/jquery-1.8.0.min.js"></script> <script type="text/javascript" src="http://bt-sale.ru/test/jquery-ui-1.8.23.custom.min.js"></script> </head> <body> <div class="main"> <div id="tabs"> <ul> <li><a href="lot_list.html">Партии</a></li> <li><a href="#tabs-1">Партии</a></li> </ul> <div id="tabs-1"> <div id="dialog_new_lot1"> <form method="POST" action="#"> <input name="form_id" type="hidden" value="add_lot"> Партия: <input name="lot" type="text" size="15" value=""><br> Дата: <input name="supply_date" type="text" size="15" value="" class="datepicker"> <br> Номер накладной: <input name="incoming" type="text" size="15" value=""><br> Дата: <input name="incoming_date" type="text" size="15" value="" class="datepicker"> <br> Продавец: <select size="1" name="distributor"> <option selected="" value="0"></option> <option value="1">ООО</option> <option value="2">ООО2</option> </select> Покупатель: <select size="1" name="firm"> <option selected="" value="0"></option> <option value="1">ИП</option> <option value="2">ООО</option> </select> <br> <p><input type="submit" value="Добавить"> <input type="reset" value="Очистить"></p> </form> </div> <table border="1" width="100%"> <tbody><tr align="center"> <td colspan="2"><b>Партия</b> <a id="open_dialog_new_lot1" name="#"><img align="top" src="http://bt-sale.ru/test/document-import.png"></a></td> <td rowspan="2"><b>Склад</b></td> <td colspan="2"><b>Накладная</b></td> <td rowspan="2"><b>Поставщик</b></td> <td rowspan="2"><b>Покупатель</b></td> <td colspan="3"><b>Товар</b></td> </tr> <tr> <td><b>Номер</b></td> <td><b>Дата</b></td> <td><b>Номер</b></td> <td><b>Дата</b></td> <td><b>Количество</b></td> <td><b>Сумма</b></td> <td><b>Сумма по себ-сти</b></td> </tr> <tr> <td>Новая1</td> <td>2012-08-18</td> <td>Трейлер</td> <td>Новая1</td> <td>2012-08-16</td> <td>ООО</td> <td>ООО</td> <td>11</td> <td>51399.00</td> <td>52199</td> </tr> <tr> <td>Новая</td> <td>2012-08-17</td> <td>Трейлер</td> <td>Новая</td> <td>2012-08-17</td> <td>ООО</td> <td>ИП</td> <td>5</td> <td>17.00</td> <td>17</td> </tr> </tbody></table> </div> </div> </div> <script type="text/javascript" src="http://bt-sale.ru/test/datepicker_config.js"></script> <script> /*//формирует вкладки $("#tabs").tabs({ ajaxOptions:{ error: function( xhr, status, index, anchor ) { $( anchor.hash ).html("Содержимое не найдено :("); } } }); //формирует вкладки $("#tabs1").tabs({ ajaxOptions:{ error: function( xhr, status, index, anchor ) { $( anchor.hash ).html("Содержимое не найдено :("); }); } }); */ //показывает форму "Новая партия" $(function(){ $("#dialog_new_lot").dialog({ autoOpen: false, modal: true, title: 'Новая партия' }); $("#open_dialog_new_lot").click(function(){ $("#dialog_new_lot").dialog("open"); }); $("#close_dialog_new_lot").click(function(){ $("#dialog_new_lot").dialog("close"); }); }); //показывает форму "Новая партия" $(function(){ $("#dialog_new_lot1").dialog({ autoOpen: false, modal: true, title: 'Новая партия' }); $("#open_dialog_new_lot1").click(function(){ $("#dialog_new_lot1").dialog("open"); }); $("#close_dialog_new_lot1").click(function(){ $("#dialog_new_lot1").dialog("close"); }); }); </script> </div> </body></html> |
Проблема решена, надо было выделить кусок
//показывает форму "Новая партия" $(function(){ $("#dialog_new_lot").dialog({ autoOpen: false, modal: true, title: 'Новая партия' }); $("#open_dialog_new_lot").click(function(){ $("#dialog_new_lot").dialog("open"); }); $("#close_dialog_new_lot").click(function(){ $("#dialog_new_lot").dialog("close"); }); $("#dialog_new_lot").dialog("enable"); }); отдельно и загружать в момент загрузки страницы во вкладку... http://bt-sale.ru/test/index.html сейчас работает как надо, обе вкладки отображаются одинаково, за одним исключением есть проблема с кодировкой, основная страница в windows-1251, в заголовке модального окна загружаемой вкладки надпись "Новая партия" хрен пойми в какой кодировке, но думаю это решаемо... |
Цитата:
http://habrahabr.ru/blogs/webdev/17640/ Просто не Хватает PHP скрипта на стороне сервера Для GET запросов Всё, что надо сделать, чтобы теперь работать в PHP в нормальной кодировке использовать iconv: $f = iconv('UTF-8', 'windows-1251', $_GET['f']); |
У меня проблема была в другом, файл .js был в кодироке виндовс-1251, переделал в ютф-8 все стало нормально...
|
Часовой пояс GMT +3, время: 20:43. |