Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Перезагрузка модального окна (https://javascript.ru/forum/dom-window/41541-perezagruzka-modalnogo-okna.html)

Round 18.09.2013 16:25

Перезагрузка модального окна
 
На странице div у которого изначально - display: none. И есть кнопка которая его открывает в модальном окне (fancybox). Эта часть работает.

В div-e, который показывает модальное окно, находится простая форма с полем <input>, кнопкой <submit> и строкой "TOTAL". Эта форма отправляет в базу некое число, и дальше оно там либо складывается, либо вычитается и результат возвращает с строку "TOTAL", через переменную - $count . Cтраница перезагружается и в строке "TOTAL" уже новое число.

Это то же работает но если без модального окна. Мне нужно что бы результат выводился в модальное окно.

Как сделать так что бы при перезагрузке страницы модальное окно то же перезагрузилось?

Вот основная часть кода.

<script>
   $('.open_box').fancybox();
</script>
 
<a href="#hide_box" class="open_box">open</a>

<div id="hide_box" style="width:950px;display: none;">

    <p id="TOTAL"><?php echo $count->get_total(); ?></p>

    <div class="my-form">
    
         <div class="label-count"><label for="count_code">Count</label></div>
         <div class="input-wrap"><input name="count_code" class="input-count" id="count_code" value="" /></div>
         <input type="submit" class="button-count" name="apply_count" value="Apply Count" />
       
    </div>

</div>


Спасибо всем кто откликнется. :thanks:

Яростный Меч 18.09.2013 16:43

отправлять данные аяксом, получать результат (некое число), запихивать его в $("#TOTAL").text(...)

Round 18.09.2013 17:11

Мне для этого нужно будет обработчик формы поменять на Ajax?

Если да, то так не получится.
Эта форма уже обрабатывается на сайте и я обработчик менять не могу.

Если глупость сморозил - сильно не бейте ))... я в ajax не разбираюсь... я больше по php специализируюсь. А тут клиенту приспичило вывести свою форму в модальное окно, что бы она просто "прикрыла" собой ту форму что уже отлажена и работает на сайте.

Можно подробнее?

Вот у меня есть переменная $count. Изначально в ней лежит - 1. После ввода в input числа 999 и отправки его в обработчик (который менять нельзя) - тот обработчик суммирует 999 с текущим значением переменной $count = 1 и результат 999 + 1 = 1000 он записывает в базу и возвращает в переменную $count. При этом перезагрузив окно.

В какую цепь мне нужно вставить ajax? И можно подробнее?

Спасибо.

Яростный Меч 18.09.2013 17:50

Цитата:

Сообщение от Round
я обработчик менять не могу.

вообще никак? или можно смотреть определенный параметр запроса, и при необходимости возвращать только <?php echo $count->get_total(); ?> ?

впрочем, если нельзя, то хрен с ним.

кнопке назначить type="button"
повесить онклик (onclick="countClick();"), в котором и отправить запрос:
function countClick() {
  var url = form.action;
  $.post(url, {count_code: $("#count_code").val(), apply_count: "Apply Count"}, function(data) {
    if (/<p\s+id="TOTAL">(\d+)/i.test(data)) { 
       $("#TOTAL").text(RegExp.$1);
    }
  });
}


примерно так. Если форма отправляется как GET, то используй $.get вместо $.post

Round 18.09.2013 17:53

Яростный Меч, спасибо. Вроде бы идею я понял... сейчас попробую реализовать.

Round 18.09.2013 18:25

Яростный Меч,

не получилось так.

Видимо обработчик завязан на кнопку type="submit" и когда я его меняю на type="button", то форма перестает обрабатываться.

Может все же как то можно это модальное окно заставить не закрываться когда перезагружается страница? Разрешить его закрывать только кнопкой close.

Яростный Меч 18.09.2013 19:48

Цитата:

Сообщение от Round
и когда я его меняю на type="button", то форма перестает обрабатываться.

да.
но форма и не должна сабмиттиться. Тебе надо просто взять данные с формы и отправить их аяксом. onclick не забыл повесить на кнопку?

Round 18.09.2013 20:19

Ага, onclick не забыл.

Все равно что то не сходится... как же основной обработчик будет выполнять подсчет, если он ждет отработки type="submit" ?

Извини, может я глупые вопросы задаю, но лучше разобраться чем тупо копипастить код.

В консоли вот такое сообщение висит:


Uncaught ReferenceError: form is not defined
countClick
onclick

Яростный Меч 18.09.2013 20:33

а, это из-за строчки var url = form.action;
я в верстке форму не увидел, оставил так. В общем, тебе надо будет скриптом взять форму и ее атрибут action

Round 18.09.2013 20:53

Понятно.

Тогда ещё один вопрос - в form на страницу php выводит следующую строчку:

<form action="http://localhost/ ... / ... /page-4/" method="post">


Но линк этот формируется динамично вот его php вариант:

<form action="<?php echo esc_url( $count->get_count_url() ); ?>" method="post">


Как его правильно прописать скрипту?

Яростный Меч 18.09.2013 21:28

<form id="count_form" action="<?php echo esc_url( $count->get_count_url() ); ?>" method="post">


и тогда в скрипте
var url = $("#count_form").attr("action");

Round 18.09.2013 21:51

блин... не работает

и в консоли ничего нет и никакой реакции на отправку данных.

консоль молчит, а Network зафиксировалась отправка POST статус - OK

Куда смотреть, где искать?

Яростный Меч 18.09.2013 22:13

Цитата:

Сообщение от Round
а Network зафиксировалась отправка POST статус - OK

Куда смотреть, где искать?

посмотреть делали запроса, что ушло, что вернулось

должны уйти данные, а вернуться некий html, в котором будет строчка <p id="TOTAL">

Round 18.09.2013 22:34

а где посмотреть детали запроса?

Яростный Меч 18.09.2013 22:44

на вкладке Network браузерного отладчика

Round 19.09.2013 08:22

По моему он ничего не передал.

Если я в правильном месте смотрел, то вот что там получаем после отработки onclick:

Form Data
count_code:
apply_count:Apply Count

Round 19.09.2013 08:35

Сейчас код выглядит вот так:

<script>
   $('.open_box').fancybox();
</script>
 
<a href="#hide_box" class="open_box">open</a>

<div id="hide_box" style="width:950px;display: none;">

<form id="count_form" action="<?php echo esc_url( $count-get_count_url() ); ?>" method="post">

    <p id="TOTAL"><?php echo $count->get_total(); ?></p>

    <div class="my-form">
    
         <div class="label-count"><label for="count_code">Count</label></div>
         <div class="input-wrap"><input name="count_code" class="input-count" id="count_code" value="" /></div>
         
         <input type="button" onclick="countClick();" class="button-count" name="apply_count" value="Apply Count" />

         <script>
                function countClick() {
                   var url = $("#count_form").attr("action");
                   $.post(url, {count_code: $("#count_code").val(), apply_count: "Apply Count"}, function(data) {
                      if (/<p\s+id="TOTAL">(\d+)/i.test(data)) { 
                        $("#TOTAL").text(RegExp.$1);
                      }
                   });
                }
        </script>
       
    </div>

</form>

</div>


Уже вдоль и поперек все перепроверил, по идее должно работать... но не работает.

Яростный Меч 19.09.2013 20:44

Цитата:

Сообщение от Round
Если я в правильном месте смотрел, то вот что там получаем после отработки onclick:

Form Data
count_code:
apply_count:Apply Count

странно... $("#count_code").val() возвращает пустую строку. А в текстовом поле был текст перед отправкой?

Round 19.09.2013 21:07

Вот именно, там было число.

я сегодня перерыл все, но так и не нашел куда деваются данные.

Сейчас пытаюсь обойти это другим способом.

Создал другой шаблон, на который перенаправляю после отправки этого input-а. Этот (второй) шаблон полностью копия первичной страницы с которой было открыто модальное окно, но тут запускаем модальное окна по onload а не onclick.

Возможно это кривое решение, но пока что кошерного выхода не вижу...


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