Как проверить, что есть поле селект у товара
Здравствуйте.
Общими усилиями для страницы написал скрипт abv347.js, который с помощью функции $('.addtocart-button').on('click', function() проверяет, выбрано ли значение из выпадающего списка с типом багета картины. Скрипт хорошо отрабатывает на странице с детальным описанием товара, где может существовать только один выпадающий список с id = baget_select. Если кликнуть на кнопку добавить в корзину на выше указанной странице категории товаров для товара, у которого нет возможности выбора типа багета, то скрипт сходит с ума, видя другие селекты с id = "baget_select". Как написать условие $('.addtocart-button').on('click', function(), которое бы проверяло, есть ли поле селект с выбором типа багета только у того товара, под которым была нажата кнопка с class="addtocart-button"? |
На странице в принципе не должно быть нескольких элементов с одинаковым id. На то он и идентификатор, чтобы быть уникальным.
Вот костыли для проверки наличия селекта багетов: var hasBagetSelection = $(this.form).find('#baget_select').length > 0; if (hasBagetSelection) { alert('есть') } else { alert('нет') }; |
Цитата:
Тестирую на локальном сервере. Условие не срабатывает верно. Воспользовался отладчиком Хрома, поставил точку останова на var hasBagetSelection = $(this.form).find('#baget_select').length > 0; он указывает, что this на этой строке это span.addtocart-button, видимо поэтому hasBagetSelection всегда = false. Выпадающий список с типом багета находится в другой ветке DOM насколько понимаю, судя по принтскрину: ![]() Как можно добраться и проверить наличие #baget_select в соседней ветке DOM? |
Цитата:
Обращайся сразу $('#baget_select') |
используйте вместо #baget_select => .baget_select
к спискам с баггетами добавьте class="baget_select" |
Цитата:
|
Цитата:
|
я вкратце объясню, так как не знаю ваш код.
вы вызываете событие $('.addtocart-button').click(function(){ //внутри есть объект this $(this).parent().prev(). //по моему такой путь до блока с выбором типа багета find('.baget_select'); // вот вам ваш объект. далее делаете с ним что хотите. }); |
Цитата:
А как определить у элемента, нажатие по которому было совершено и функция для которого сейчас выполняется, наличие/отсутствие класса с определённым именем? |
$('element').click(function(){ $(this).hasClass('class_name'); // true, если есть, false - если нет }); |
Цитата:
|
Цитата:
var elements = $('span.addtocart-button'); for(var i=0; i<elements.length; i++) { var selection = $(elements[i]).parent().prev().find('#baget_select');//выбираю в соседней ветке DOM структуры select с #baget_select if (selection.length > 0 ){ if(selection.text()=='Выберите багет'){ alert('отключить эту кнопку!'); } else { alert('оставить эту кнопку!'); } } } проходит по ветке else условного оператора, а сам alert(selection.text()) выводит текст вида "Выберите багет┘темныйсветлый" где под ┘ я имею в виду перевод на новую строку. а вот html-код того, что по идее отлавливается в selection: Код:
<select name="customPrice[0][10]" required="" id="baget_select"> |
я сейчас толком не вдавался в ваш код. но судя по тому что я увидел вы по прежнему используете множество одинаковых id на странице. id - это уникальный идентификатор элемента на странице. не может быть двух одинаковых id. иначе пропадает уникальность. используйте class.
далее для цикла есть хороший оператор each. используейте его. $( ".baget_select" ).each(function() { $( this ).length // вот длина вашего объекта. не знаю что вы с ней делаете дальше... }); |
Часовой пояс GMT +3, время: 10:31. |