Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.03.2020, 11:31
Интересующийся
Отправить личное сообщение для banditman Посмотреть профиль Найти все сообщения от banditman
 
Регистрация: 23.04.2017
Сообщений: 16

Замена radio на select
Приветствую форумчане!
Стоит задача по работе с тильда сайтом замена radio на select в корзине т.к. список точек самовывоза 20+ штук radio кнопки смотрятся длинной портянкой!

Т.к. доступа к файловой системе нет Тильда это неудобная и прекрасная CMS а всего лишь конструктор, написал следующий скрипт замены:
//Код представления выпадающего списка магазинов доставки
$(".t-radio__wrapper.t-radio__wrapper-delivery").wrap("<div class='Delivery'></div>");
$('.t-radio__wrapper-delivery label').wrap('<option class="item"></option>');
$(".t-input-group_dl.t-input-group_dl .Delivery .item").wrapAll("<select class='new'></select>");


SELECT реализовать получилось, но выбор как при радио при отправке формы не происходит, всегда встает только значение по умолчанию, которое выбрано в админке!

Код до срабатывания скрипта (кусок):
<div class="t-input-group t-input-group_dl" data-input-lid="1566467945834">
  <div class="t-input-subtitle t-descr t-descr_xxs t-opacity_70" data-redactor-toolbar="no" field="li_subtitle__1566467945834" style="">Доставка по г. Санкт-Петербург - 200 руб. (от 2000 руб. доставка бесплатная)</div>
  <div class="t-input-block">
    <div class="t-radio__wrapper t-radio__wrapper-delivery" data-delivery-variants-hook="y" data-delivery-free="2000">
      <label class="t-radio__control t-text t-text_xs" style="">
      <input type="radio" name="Delivery" value="Доставка курьером 200 руб. = 200" checked="checked" class="t-radio t-radio_delivery js-tilda-rule" data-tilda-req="1" data-delivery-price=" 200">
      <div class="t-radio__indicator"></div>
      Доставка курьером 200 руб.
      </label>
      <label class="t-radio__control t-text t-text_xs" style="">
      <input type="radio" name="Delivery" value="1.	Б.Московская 8/2 М.Владимирская маг. Великолукский мясокомбинат                                     	" class="t-radio t-radio_delivery js-tilda-rule" data-tilda-req="1" data-delivery-price="">
      <div class="t-radio__indicator"></div>
      1.	Б.Московская 8/2 М.Владимирская маг. Великолукский мясокомбинат
      </label>
      <label class="t-radio__control t-text t-text_xs" style="">
      <input type="radio" name="Delivery" value="2.	1-я Красноармейская 8-10. М.Технологический ин-т. МЕДОК	" class="t-radio t-radio_delivery js-tilda-rule" data-tilda-req="1" data-delivery-price="">
      <div class="t-radio__indicator"></div>
      2.	1-я Красноармейская 8-10. М.Технологический ин-т. МЕДОК
      </label>
      <label class="t-radio__control t-text t-text_xs" style="">
      <input type="radio" name="Delivery" value="3.	М. Ладожская ТК Заневский Каскад    цокольный этаж  	" class="t-radio t-radio_delivery js-tilda-rule" data-tilda-req="1" data-delivery-price="">
      <div class="t-radio__indicator"></div>
      3.	М. Ладожская ТК Заневский Каскад    цокольный этаж
      </label>
    </div>
    <div class="t-input-error"></div>
  </div>
</div>


Код после срабатывания скрипта (кусок):
<div class="t-input-group t-input-group_dl" data-input-lid="1566467945834">
<div class="t-input-subtitle t-descr t-descr_xxs t-opacity_70" data-redactor-toolbar="no" field="li_subtitle__1566467945834" style="">Доставка по г. Санкт-Петербург - 200 руб. (от 2000 руб. доставка бесплатная)</div>
<div class="t-input-block">
<div class="Delivery">
<div class="t-radio__wrapper t-radio__wrapper-delivery" data-delivery-variants-hook="y" data-delivery-free="2000">
<select class="new">
  <option class="item">
  <label class="t-radio__control t-text t-text_xs" style="">
    <input type="radio" name="Delivery" value="Доставка курьером 200 руб. = 200" checked="checked" class="t-radio t-radio_delivery js-tilda-rule" data-tilda-req="1" data-delivery-price=" 200">
    <div class="t-radio__indicator">
    </div>
    Доставка курьером 200 руб. </label>
  </option>
  <option class="item">
  <label class="t-radio__control t-text t-text_xs" style="">
    <input type="radio" name="Delivery" value="1.	Б.Московская 8/2 М.Владимирская маг. Великолукский мясокомбинат                                     	" class="t-radio t-radio_delivery js-tilda-rule" data-tilda-req="1" data-delivery-price="">
    <div class="t-radio__indicator">
    </div>
    1.	Б.Московская 8/2 М.Владимирская маг. Великолукский мясокомбинат </label>
  </option>
  <option class="item">
  <label class="t-radio__control t-text t-text_xs" style="">
    <input type="radio" name="Delivery" value="2.	1-я Красноармейская 8-10. М.Технологический ин-т. МЕДОК	" class="t-radio t-radio_delivery js-tilda-rule" data-tilda-req="1" data-delivery-price="">
    <div class="t-radio__indicator">
    </div>
    2.	1-я Красноармейская 8-10. М.Технологический ин-т. МЕДОК </label>
  </option>
  <option class="item">
  <label class="t-radio__control t-text t-text_xs" style="">
    <input type="radio" name="Delivery" value="3.	М. Ладожская ТК Заневский Каскад    цокольный этаж  	" class="t-radio t-radio_delivery js-tilda-rule" data-tilda-req="1" data-delivery-price="">
    <div class="t-radio__indicator">
    </div>
    3.	М. Ладожская ТК Заневский Каскад    цокольный этаж </label>
  </option>
</select>
</div>
</div>
<div class="t-input-error"></div>
</div>
</div>


Заранее благодарю за ответ!
Ответить с цитированием
  #2 (permalink)  
Старый 08.03.2020, 11:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Сообщение от banditman
SELECT реализовать получилось
фантастика!
Ответить с цитированием
  #3 (permalink)  
Старый 08.03.2020, 12:09
Интересующийся
Отправить личное сообщение для banditman Посмотреть профиль Найти все сообщения от banditman
 
Регистрация: 23.04.2017
Сообщений: 16

Сообщение от рони Посмотреть сообщение
фантастика!
???
Ответить с цитированием
  #4 (permalink)  
Старый 08.03.2020, 12:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

banditman,
вам нужно рыть в сторону кастомизаторов селекта. обычный селект не может содержать, то что вы в него хотите в него поместить.
Ответить с цитированием
  #5 (permalink)  
Старый 08.03.2020, 12:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Сообщение от banditman
Код после срабатывания скрипта
не верьте глазам своим!
Ответить с цитированием
  #6 (permalink)  
Старый 08.03.2020, 12:26
Интересующийся
Отправить личное сообщение для banditman Посмотреть профиль Найти все сообщения от banditman
 
Регистрация: 23.04.2017
Сообщений: 16

Сообщение от рони Посмотреть сообщение
banditman,
вам нужно рыть в сторону кастомизаторов селекта. обычный селект не может содержать, то что вы в него хотите в него поместить.
Спасибо, буду смотреть, проблема усугубляется тем, что я не могу и править исходники, а это бы очень упростило процесс переделки под select
Ответить с цитированием
  #7 (permalink)  
Старый 08.03.2020, 12:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

banditman,
собрать все value из name="Delivery" и создать обычный <select name="Delivery"> с этими данными, заменить блок на селект.
Ответить с цитированием
  #8 (permalink)  
Старый 08.03.2020, 12:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

banditman,
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script>
$(function() {
   $('.t-input-block').replaceWith(function() {
   var sel =  $('<select name="Delivery">');
   var options = sel[0].options;
   $('[name="Delivery"]').each(function(i,el) {
   options[i] = new Option(el.value, el.value);
   })
   return sel
})
});
  </script>
</head>
<body>
<div class="t-input-group t-input-group_dl" data-input-lid="1566467945834">
  <div class="t-input-subtitle t-descr t-descr_xxs t-opacity_70" data-redactor-toolbar="no" field="li_subtitle__1566467945834" style="">Доставка по г. Санкт-Петербург - 200 руб. (от 2000 руб. доставка бесплатная)</div>
  <div class="t-input-block">
    <div class="t-radio__wrapper t-radio__wrapper-delivery" data-delivery-variants-hook="y" data-delivery-free="2000">
      <label class="t-radio__control t-text t-text_xs" style="">
      <input type="radio" name="Delivery" value="Доставка курьером 200 руб. = 200" checked="checked" class="t-radio t-radio_delivery js-tilda-rule" data-tilda-req="1" data-delivery-price=" 200">
      <div class="t-radio__indicator"></div>
      Доставка курьером 200 руб.
      </label>
      <label class="t-radio__control t-text t-text_xs" style="">
      <input type="radio" name="Delivery" value="1.	Б.Московская 8/2 М.Владимирская маг. Великолукский мясокомбинат                                     	" class="t-radio t-radio_delivery js-tilda-rule" data-tilda-req="1" data-delivery-price="">
      <div class="t-radio__indicator"></div>
      1.	Б.Московская 8/2 М.Владимирская маг. Великолукский мясокомбинат
      </label>
      <label class="t-radio__control t-text t-text_xs" style="">
      <input type="radio" name="Delivery" value="2.	1-я Красноармейская 8-10. М.Технологический ин-т. МЕДОК	" class="t-radio t-radio_delivery js-tilda-rule" data-tilda-req="1" data-delivery-price="">
      <div class="t-radio__indicator"></div>
      2.	1-я Красноармейская 8-10. М.Технологический ин-т. МЕДОК
      </label>
      <label class="t-radio__control t-text t-text_xs" style="">
      <input type="radio" name="Delivery" value="3.	М. Ладожская ТК Заневский Каскад    цокольный этаж  	" class="t-radio t-radio_delivery js-tilda-rule" data-tilda-req="1" data-delivery-price="">
      <div class="t-radio__indicator"></div>
      3.	М. Ладожская ТК Заневский Каскад    цокольный этаж
      </label>
    </div>
    <div class="t-input-error"></div>
  </div>
</div>

</body>
</html>
Ответить с цитированием
  #9 (permalink)  
Старый 08.03.2020, 18:03
Интересующийся
Отправить личное сообщение для banditman Посмотреть профиль Найти все сообщения от banditman
 
Регистрация: 23.04.2017
Сообщений: 16

Сообщение от рони Посмотреть сообщение
banditman,
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script>
$(function() {
   $('.t-input-block').replaceWith(function() {
   var sel =  $('<select name="Delivery">');
   var options = sel[0].options;
   $('[name="Delivery"]').each(function(i,el) {
   options[i] = new Option(el.value, el.value);
   })
   return sel
})
});
  </script>
</head>
<body>
<div class="t-input-group t-input-group_dl" data-input-lid="1566467945834">
  <div class="t-input-subtitle t-descr t-descr_xxs t-opacity_70" data-redactor-toolbar="no" field="li_subtitle__1566467945834" style="">Доставка по г. Санкт-Петербург - 200 руб. (от 2000 руб. доставка бесплатная)</div>
  <div class="t-input-block">
    <div class="t-radio__wrapper t-radio__wrapper-delivery" data-delivery-variants-hook="y" data-delivery-free="2000">
      <label class="t-radio__control t-text t-text_xs" style="">
      <input type="radio" name="Delivery" value="Доставка курьером 200 руб. = 200" checked="checked" class="t-radio t-radio_delivery js-tilda-rule" data-tilda-req="1" data-delivery-price=" 200">
      <div class="t-radio__indicator"></div>
      Доставка курьером 200 руб.
      </label>
      <label class="t-radio__control t-text t-text_xs" style="">
      <input type="radio" name="Delivery" value="1.	Б.Московская 8/2 М.Владимирская маг. Великолукский мясокомбинат                                     	" class="t-radio t-radio_delivery js-tilda-rule" data-tilda-req="1" data-delivery-price="">
      <div class="t-radio__indicator"></div>
      1.	Б.Московская 8/2 М.Владимирская маг. Великолукский мясокомбинат
      </label>
      <label class="t-radio__control t-text t-text_xs" style="">
      <input type="radio" name="Delivery" value="2.	1-я Красноармейская 8-10. М.Технологический ин-т. МЕДОК	" class="t-radio t-radio_delivery js-tilda-rule" data-tilda-req="1" data-delivery-price="">
      <div class="t-radio__indicator"></div>
      2.	1-я Красноармейская 8-10. М.Технологический ин-т. МЕДОК
      </label>
      <label class="t-radio__control t-text t-text_xs" style="">
      <input type="radio" name="Delivery" value="3.	М. Ладожская ТК Заневский Каскад    цокольный этаж  	" class="t-radio t-radio_delivery js-tilda-rule" data-tilda-req="1" data-delivery-price="">
      <div class="t-radio__indicator"></div>
      3.	М. Ладожская ТК Заневский Каскад    цокольный этаж
      </label>
    </div>
    <div class="t-input-error"></div>
  </div>
</div>

</body>
</html>
Почти получилось, select появился, но он делает замену старого кода полностью, теперь я понял почему и у меня в прошлый раз не получилось моим скриптом теряется 2-ва параметра один из них div с условием от какой суммы бесплатная доставка это вот этот:
<div class="t-radio__wrapper t-radio__wrapper-delivery" data-delivery-variants-hook="y" data-delivery-free="2000">

а второй в самом radio
data-delivery-price=" 200"
- он есть в первом где доставка курьером в остальных где доставка бесплатна он пуст
data-delivery-price=""
Ответить с цитированием
  #10 (permalink)  
Старый 08.03.2020, 18:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

banditman,
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена select на radio Nikita87200 Элементы интерфейса 4 25.10.2020 16:38
checkbox, radio и select c option Hekumok Общие вопросы Javascript 8 12.04.2016 17:51
Замена input на select dima_riabets Общие вопросы Javascript 8 16.01.2015 21:28
Заменить select на radio (userscript) DerMaister Элементы интерфейса 2 06.10.2013 21:32
Замена значений в select derbass jQuery 2 23.01.2013 20:10