Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Одинаковые эффекты на разные объекты jQuery (https://javascript.ru/forum/jquery/54755-odinakovye-ehffekty-na-raznye-obekty-jquery.html)

Infinity178 30.03.2015 23:05

Одинаковые эффекты на разные объекты jQuery
 
Доброго дня

Производится Ajax запрос

$.get( "ajax/load.php", function(data) {
  if(data){ 
     if(btn.is('[data-type="price"]')){
       modal_main.html(data.price).hide().show("fade", 1000 );
     } else if(btn.is('[data-type="callme"]')){
       modal_main.html(data.callme).hide().show("fade", 1000);
     }
  }
});


modal_main = DIV в который выгружаем data.
Как можно об играть .hide().show("fade", 1000 ); данную часть?
Что бы не прописывать к каждой выгрузке, а сделать в одном месте.

laimas 31.03.2015 04:33

А зачем тогда if(who is button)?
modal_main.html(data[btn.data('type')]).hide().show("fade", 1000 );

Infinity178 31.03.2015 05:03

$.get( "ajax/load.php", function(data) {
  if(data){ 
     if(btn.is('[data-type="price"]')){
       modal_main.html(data.price).hide().show("fade", 1000 );
     } else if(btn.is('[data-type="callme"]')){
       modal_main.html(data.callme).hide().show("fade", 1000);
     }
  }
});


ajax/load.php - PHP файл, в нем список TPL файлов + GET параметры к шаблону
btn - это кнопка в HTML
<!-- пример кнопки -->
<a href="#" 
     class="fc_btn icon-phone-squared"
     data-ajax="ajax_btn" 
     data-header="Заказать звонок" 
     data-type="callme">
     Заказать звонок
</a>


т.е. суть какая:
есть web-сайт, на нем "N" кол-во форм (заказать звонок, купить в один клик, обратная связь, оставить комментарий и т.п.)..
Практически все формы должны быть в модальном окне.
Логика происходящего:
1. HTML скелет модального окна
<div class="box-modal" id="ajax_modal">
   <div class="box-modal_header">
      <div class="box-modal_name"></div>
        <div class="box-modal_close">x</div>
      </div>
   <div class="box-modal_content"></div>
</div>

2. JS функция вызывающая модальное окно
$(document).on('click', '[data-ajax="ajax_btn"]', function(){
  var modal_name = $(this).attr('data-header');
  var modal_main = $('#ajax_modal').find('.box-modal_content');
  $('#ajax_modal').find('.box-modal_name').html(modal_name);
  $('#ajax_modal').modal({ /*.. тут GET AJAX ..*/});
  return false;
});

3. Ajax GET загружаем в .box-modal_content нужную нам форму в зависимости от нажатой кнопки

В зависимости от атрибутов кнопки (по которой кликнули) у нас происходит заполнение модального окна и соответственно показывается нужная форма.

- - - - - - - - -
А теперь еще возвращаемся к вопросу! :) Как можно записать применяемые эффекты к data.* что бы было по принцепу:
var str = $(this);

?

laimas 31.03.2015 05:19

Лучше вернитесь к первоначальному. Что у вас записано, а записано следующее:

1) есть объект А на клиенте
2) определяется что за кнопка активировала запрос, и по значению этой кнопки определяется свойство возвращенного объекта, который надо поместить в А

Возникает вопрос - а зачем этот огород вообще нужен?

Если возвращенные данные загружаются в один и тот же объект на клиенте, а инициаторами запроса сервера выступают N кнопок, то надо полагать, что параметры запроса будут различны.
Если параметры запроса различны, а значит и север возвращает соответствующие им данные, то каким образом он может возвратить помимо нужных еще и лишние данные?
А если сервер возвращает только необходимые данные, то никаких проверок на клиенте быть не должно.

Если А - объект принимающий формы, то запрос от bt1, bt2... вернет только нужную форму (если все грамотно построено), а значит

A.html(data) - все, и к чему эти if()?

Другое дело, если по ответу сервера возвращенные данные могут загружаться в N объектов на клиенте, то свойства возвращенного объекта могут идентифицировать эти N объектов, тогда:
for(k in data) $('#'+k).html(data[k])

Infinity178 31.03.2015 06:33

$.get( "ajax/load.php", function(data) {
      for (key in data) {
         modal_main.html(data[key]).hide().show("fade", 1000 );
     }
});


что то подобное должно получится?

я правильно понимаю?
При клике получаем "ключ" который собственно используем в php для вызова нужного tpl?

laimas 31.03.2015 06:52

А у вас что сразу несколько форм сервер возвращает? Вы же пишите, что они в один объект всегда помещаются, а в момент времени запрашивается и возвращается одна форма, и зачем data[key], можно ведь html вернуть и modal_main.html(data).
А вот для обмена данными формы с сервером тут удобнее будет JSON, так как нужно будет обрабатывать ошибки в полях и отображать их.

Infinity178 31.03.2015 07:33

:)
запрос на получения шаблона формы - производится в один файл (php) он уже из массива берет нужный по (data.xxx)
а на post формы уже у каждой свой обработчик

Infinity178 31.03.2015 07:38

$result = array( 
  'callme' => $api->design->fetch('ajax/ajax.modal_callme.tpl'),
  'price'   =>$api->design->fetch('ajax/ajax.modal_price.tpl'));


вот собственно каким образом распределение.. в php.

Но вы навели меня на нужную линию)) комфортней будет при нажатие:
берем (скажем data-key) общаемся в load.php - вставляем наш key в result подбираем TPL файл и вставляем уже просто .html(data)

Infinity178 31.03.2015 07:53

laimas,
Профессор! Огроменнейшая благодарность за идею!

Вопрос снят с производства )))

Итог, ключевое:
php
$result = $api->design->fetch('ajax/ajax.modal_'.$key.'.tpl');


js
$.get( "ajax/load.php", function(data) {
  modal_main.html(data).hide().show("fade", 1000 );
});

laimas 31.03.2015 08:08

Ну вообще можно было бы и проще:
exit($api->design->fetch('ajax/ajax.modal_'.$key.'.tpl'))

если $key определяемая POST-запросом определена условием или набором.

А на мысль должно наводить содержание вашего сайта и задачи его обслуживаемые. Например, почему бы и нет, если Ajax success всех запросов будет ссылаться всегда на один и тот же объект описывающий набор различных функций. А обмен данными всегда JSON, свойства которого определяют функцию (функции), которые будут выполнены. А это может быть помещение данных в объекты, вывод сообщений, обработка ошибок, определение значений установленным переменным, и т.п.

В общем некий диспетчер, и без всяких IF. И один запрос/ответ может определять выполнение нескольких функций на клиенте, например, поместить данные в объектах и вывеси сообщение. Но чтобы возвращалось сразу N-форм, это нонсенс.


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