Неверное отображение выпадающего списка в фильтре (чистая система)

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО InstantCMS 2.X
#1 27 сентября 2021 в 11:40

Привет.Воспроизвел проблему на чистой системе (на мобильном). при выборе в фильтре выпадающего списка, в списке присутствует пустая опция, как можно ее убрать из отображения? Если выбираю первый пункт то просто выходит пустая опция.

Изображение

Изображение

Изображение

#2 27 сентября 2021 в 15:05
Вот почему сразу "неверное"? Может просто "мне не нравится, помогите изменить"?😀

По делу: если достаточно удалить, уберите вывод скриптом. Проверяете на устройство (предполагаю, что для компов нет смысла выводить скрипт) и убираете option с пустым value в фильтре:

  1. $(function(){
  2. /* "kind" - системное имя поля, которое обработаем скриптом */
  3. $(".icms-filter-container #kind option[value='']").remove();
  4. });

Возможно, лучше не убирать пункт, а назначить ему текст («Не важно» или «Все варианты» или...). Но в этом случае уже надо будет подумать об изменении атрибутов у соседей при выборе этого варианта

 

#3 27 сентября 2021 в 16:42
Вот почему сразу "неверное"? Может просто "мне не нравится, помогите изменить"?😀

По делу: если достаточно удалить, уберите вывод скриптом. Проверяете на устройство (предполагаю, что для компов нет смысла выводить скрипт) и убираете option с пустым value в фильтре:

  1. $(function(){
  2. /* "kind" - системное имя поля, которое обработаем скриптом */
  3. $(".icms-filter-container #kind option[value='']").remove();
  4. });

Возможно, лучше не убирать пункт, а назначить ему текст («Не важно» или «Все варианты» или...). Но в этом случае уже надо будет подумать об изменении атрибутов у соседей при выборе этого варианта

 

Олег Васильевич я

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

Если не против, обьясните про  option[value = " "] -  как это понимать? Если value имеет пустую строку в массиве, то удаляем?

#4 27 сентября 2021 в 17:01

Если не против, обьясните про  option[value = " "] -  как это понимать? Если value имеет пустую строку в массиве, то удаляем?

KoRn

Так точнее: если у элемента пустое значение атрибута value, то...

#5 27 сентября 2021 в 21:29

Если не против, обьясните про  option[value = " "] -  как это понимать? Если value имеет пустую строку в массиве, то удаляем?

KoRn

Так точнее: если у элемента пустое значение атрибута value, то...

Олег Васильевич я

Понял, большое спасибо за помощь)).

Добавлено спустя 3 часа

Решение в main.php пишем скрипт $("#нужный_айди option[value='']").remove(); В итоге все работает, большое спасибо — Олегу Васильевичу.

#6 28 сентября 2021 в 09:28

Решение в main.php пишем скрипт $("#нужный_айди option[value='']").remove(); В итоге все работает...

KoRn

Не совсем так. Как минимум, ещё не хватает условий на устройство и страницы, где скрипт нужен. Скорей всего и подключить можно в файле виджета  (тогда отпадёт необходимость в устовии на страницы). Надо предметнее смотреть «на месте»

#7 28 сентября 2021 в 13:46

Решение в main.php пишем скрипт $("#нужный_айди option[value='']").remove(); В итоге все работает...

KoRn

Не совсем так. Как минимум, ещё не хватает условий на устройство и страницы, где скрипт нужен. Скорей всего и подключить можно в файле виджета  (тогда отпадёт необходимость в устовии на страницы). Надо предметнее смотреть «на месте»

Олег Васильевич я

В принципе да, попробую разобраться и выложу решение. По поводу условий для устройства нужно подумать и поискать решение. По идее нужно так, откл. на ПК и вкл. на МОБ. Либо просто ВКЛ на МОБ))) Надеюсь понятно о чем я)).

#8 28 сентября 2021 в 15:33

По поводу условий для устройства нужно подумать

KoRn

Нам с вами тут уже не о чём думать: г-н Разработчик давно подумал за нас и теперь во всём шаблоне доступна переменная $device_type, которая строку с  устройством и содержит. Если где-то окажется не доступной, можно получить так:

  1. $device_type = cmsRequest::getDeviceType();

 

#9 28 сентября 2021 в 15:44

По поводу условий для устройства нужно подумать и поискать решение.

KoRn

Если вы размещаете JS в HTML-виджете, то выставьте показывать на мобильных. Вам уже Олег Васильевич я писал.

#10 28 сентября 2021 в 20:46

В общем господа, вроде бы работает. На мобилках отключается.

  1. if($device_type != 'desktop'){
  2. $(function(){
  3. $("#etaj_filter163 option[value='']").remove();
  4. $("#sroc_filter163 option[value='']").remove();
  5. $("#orientir_filter163 option[value='']").remove();
  6. $("#rion_filter163 option[value='']").remove();
  7. $("#metro_filter163 option[value='']").remove();
  8. $("#teh_filter163 option[value='']").remove();
  9. });
  10. };

Ну и собственно поместить в шаблон виджета труда не составит))

#11 28 сентября 2021 в 20:58

В общем господа, вроде бы работает. На мобилках отключается.

  1. if($device_type != 'desktop'){

Ну и собственно поместить в шаблон виджета труда не составит))

KoRn

Зачёт!))

#12 28 сентября 2021 в 22:59

В общем господа, вроде бы работает. На мобилках отключается.

  1. if($device_type != 'desktop'){

Ну и собственно поместить в шаблон виджета труда не составит))

KoRn

Зачёт!))

Олег Васильевич

Надеюсь Вы не против. Но еще не все)). В main.ipi работает а вот если в шаблон виджета, то там не хочет. Делаю так (в данный момент нужно на desktop скрыть несколько label. Вроде бы функцию поместили в переменную, что еще надо? 

  1. <?php ob_start(); ?>
  2. <script>
  3. $device_type = cmsRequest::getDeviceType();
  4. if($device_type = 'desktop'){ //выполняем на пк
  5. $(function(){
  6. $(".f_sroc > label").hide();//скрываем заголовки полей
  7. $(".f_rion > label ").hide();
  8. $(".f_metro > label").hide();
  9. $(".f_orientir > label").hide();
  10. });
  11. };
  12. </script>
  13. <?php $this->addBottom(ob_get_clean()); ?>
#13 28 сентября 2021 в 23:25

Это вот что такое?

  1. if($device_type = 'desktop'){ //выполняем на пк
#14 28 сентября 2021 в 23:35

Это вот что такое?

  1. if($device_type = 'desktop'){ //выполняем на пк
IamB

По моей логике, если ПК то выполняем условие, как то так.

Это вот что такое?

  1. if($device_type = 'desktop'){ //выполняем на пк
IamB

По моей логике, если ПК то выполняем условие, как то так.

KoRn

Кажется заметил присваивание вместо -  ==

Или не то?

#15 29 сентября 2021 в 09:55

 KoRn, вы хотите, чтобы я за вас код написал. Есть сомнения — найдите способ проверить. Я указал вам на одну из возможных ошибок — дальше сами.

Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.