Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Не работает модальное окно в подгружаемой вкладке. (https://javascript.ru/forum/jquery/30912-ne-rabotaet-modalnoe-okno-v-podgruzhaemojj-vkladke.html)

Arey 20.08.2012 12:49

Не работает модальное окно в подгружаемой вкладке.
 
Привет всем! Возникла сложность не знаю как решить... Есть страница в которой две вкладки реализованой через 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>

размещенная в первой вкладке работает нормально, она же размещенная в подгружаемой страничке не работает совсем, т.е. я на второй странице вижу и ссылку и надпись "проверка", естественно при клике на ссылку ничего не происходит... Подскажите как победить проблему если кто сталкивался. Заранее спасибо.

Deff 20.08.2012 15:31

Arey,
Аякс загрузку нужно делать через чистый Aякс responseText
Либо отдельно подгрузить (или сразу установить скрипты) для подгружаемой вкладки, обычный get или load скрипты отсекает
Если скрипты уже стоят на странице - то
1. Можно их переинициализировать по загрузке вкладке(скорей всего у Вас события в скрипте не live)
2. Любо прописываем через "Живые события" on или live

Arey 20.08.2012 17:57

Цитата:

Сообщение от Deff (Сообщение 199038)
Arey,
Аякс загрузку нужно делать через чистый Aякс responseText
Либо отдельно подгрузить (или сразу установить скрипты) для подгружаемой вкладки, обычный get или load скрипты отсекает
Если скрипты уже стоят на странице - то
1. Можно их переинициализировать по загрузке вкладке(скорей всего у Вас события в скрипте не live)
2. Любо прописываем через "Живые события" on или live

К сожалению я пока еще очень сильно плаваю в яваскрипт и надстройках... Можно немного более развернуто написать все то что Вы написали?
Если я правильно понял, то проблема в том что у меня появляются дивы которые долны быть обработаны до момента загрузки страницы и появление новых блоков которым должны быть присвоены соответсвующие параметры, в частности hide на модальное окно происходит после того, как собственно уже все присвоено, и так как нет никаких событий позволяющих это сделать заново и присвоить эти параметры то окно видно. Я правильно понял? Если да то насколько я понял после загрузки страницы на сделать что-то типа "перезапуска" куска кода? Если логика верна подскажите пожалуйста как это лучше сделать.

Deff 20.08.2012 18:31

Arey,
Если скрипты уже стоят на странице(а не подгружаются с контентом - то события им нужно прописывать либо через live, либо через on в версиях более 1.7.0
live для старых версий => http://jquery-docs.ru/Events/live/#typefn

Arey 20.08.2012 22:17

Цитата:

Сообщение от Deff (Сообщение 199137)
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>

Deff 20.08.2012 22:20

Цитата:

Сообщение от Arey
Скрипты уже стоят на странице, ткните пожалуйста пальцем как должно быть, вот так сейчас:

Версия jQuery - какая ?

Arey 20.08.2012 22:23

1.8 самая свежая

Deff 20.08.2012 23:19

$(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");
  });
});

Deff 20.08.2012 23:22

Цитата:

Сообщение от Arey
<a id="open_dialog_new_position" href="#">проверить</a>

Ксать - интересует - а иные , прошлые вкладки с таким id - остаются ?

Arey 20.08.2012 23:50

Цитата:

Сообщение от Deff (Сообщение 199208)
Ксать - интересует - а иные , прошлые вкладки с таким id - остаются ?

В смысле есть ли еще на странице элементы с таким же id? Если это имелось ввиду то нет, id не повторяются...

Deff 20.08.2012 23:54

Цитата:

Сообщение от Arey
В смысле есть ли еще на странице элементы с таким же id? Если это имелось ввиду то нет, id не повторяются...

Ок

Arey 20.08.2012 23:58

Цитата:

Сообщение от Deff (Сообщение 199207)
$(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");
  });
});

Увы не работает, как минимум не срабатывает первый кусок не прячет div с id=dialog_new_position

Deff 21.08.2012 00:04

Arey,
Инет ссыль живая - есть ?

Arey 21.08.2012 14:31

Нет, но постараюсь до вечера слепить страничку и выкинуть куда-нибудь

Arey 24.08.2012 23:38

Извиняюсь что долго молчал, что-то работай завалило... по ссылке ниже тестовая страница, на первой вкладке подгружаемая страница, форма сверху не прячется, на второй так как должно работать (надо нажать на значок рядом с надписью "Партия")...
http://bt-sale.ru/test/index.html
Это один и тот же кусок, только первая вкладка подгружается из lot_list.html, а вторая находиться в index.html

Deff 25.08.2012 00:33

Arey,
1. Замените Контент Подгружаемого Скриптa:
<script type="text/javascript" src="supply.js"></script>

//формирует вкладки
$("#tabs").tabs({
  ajaxOptions:{
    error: function( xhr, status, index, anchor ) {
      $( anchor.hash ).html("Содержимое не найдено&nbsp;:(");
    }
  }
});

/*
//формирует вкладки
$("#tabs1").tabs({
    ajaxOptions:{
    error: function( xhr, status, index, anchor ) {
      $( anchor.hash ).html("Содержимое не найдено&nbsp;:(");
    });
  }
});

*/


//показывает форму "Новая партия"
$(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");
  });

});

Deff 25.08.2012 00:54

Arey,
C этими двумя фишками - что-то напудрено:
//формирует вкладки
$("#tabs").tabs({
  ajaxOptions:{
    error: function( xhr, status, index, anchor ) {
      $( anchor.hash ).html("Содержимое не найдено&nbsp;:(");
    }
  }
});

/*
//формирует вкладки
$("#tabs1").tabs({
    ajaxOptions:{
    error: function( xhr, status, index, anchor ) {
      $( anchor.hash ).html("Содержимое не найдено&nbsp;:(");
    });
  }
});

Не наю таких методов
Есть вроде

Цитата:

$("#tabs1").tabs("load",index)
Обновляет содержимое вкладки, идущей под номером index (имеются ввиду вкладки, содержимое которых подгружается с помощью ajax). Нумерация вкладок начинается с 0.

Arey 25.08.2012 09:32

Цитата:

Сообщение от Deff
1. Замените Контент Подгружаемого Скриптa:

Заменил, ничего не изменилось...
Цитата:

Сообщение от Deff
C этими двумя фишками - что-то напудрено:
//формирует вкладки
$("#tabs").tabs({
  ajaxOptions:{
    error: function( xhr, status, index, anchor ) {
      $( anchor.hash ).html("Содержимое не найдено&nbsp;:(");
    }
  }
});
 
/*
//формирует вкладки
$("#tabs1").tabs({
    ajaxOptions:{
    error: function( xhr, status, index, anchor ) {
      $( anchor.hash ).html("Содержимое не найдено&nbsp;:(");
    });
  }
});

Не наю таких методов
Есть вроде

Цитата:
$("#tabs1").tabs("load",index)
Обновляет содержимое вкладки, идущей под номером index (имеются ввиду вкладки, содержимое которых подгружается с помощью ajax). Нумерация вкладок начинается с 0.

Все описано тут
http://jquery.page2page.ru/index.php...D0%BA%D0%B8_UI
Вроде все работает, ajaxOptions во вкладке "свойства" сам кусок кода взят от туда же если нажать на надпись "Ajax" рядом с примером, а потом на ссылку "показать исходный код" над примером то там все можно увидеть...
Сильно подозреваю что в подгружаемой вкладке не работает или Jquery или Jquiey UI, а может и то и другое...

Deff 25.08.2012 09:46

<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("Содержимое не найдено&nbsp;:(");
    }
  }
});


//формирует вкладки
$("#tabs1").tabs({
    ajaxOptions:{
    error: function( xhr, status, index, anchor ) {
      $( anchor.hash ).html("Содержимое не найдено&nbsp;:(");
    });
  }
});

*/


//показывает форму "Новая партия"
$(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>

Arey 25.08.2012 10:23

Проблема решена, надо было выделить кусок
//показывает форму "Новая партия"
$(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, в заголовке модального окна загружаемой вкладки надпись "Новая партия" хрен пойми в какой кодировке, но думаю это решаемо...

Deff 25.08.2012 10:38

Цитата:

Сообщение от Arey
в заголовке модального окна загружаемой вкладки надпись "Новая партия" хрен пойми в какой кодировке, но думаю это решаемо...

У мну подобное было в связи с неправильно прописанным хедером для Аякса в PHP
http://habrahabr.ru/blogs/webdev/17640/
Просто не Хватает PHP скрипта на стороне сервера
Для GET запросов

Всё, что надо сделать, чтобы теперь работать
в PHP в
нормальной кодировке использовать iconv:

$f = iconv('UTF-8', 'windows-1251', $_GET['f']);

Arey 26.08.2012 15:48

У меня проблема была в другом, файл .js был в кодироке виндовс-1251, переделал в ютф-8 все стало нормально...


Часовой пояс GMT +3, время: 20:43.