Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.03.2014, 12:46
Аватар для borus
Кандидат Javascript-наук
Отправить личное сообщение для borus Посмотреть профиль Найти все сообщения от borus
 
Регистрация: 07.12.2012
Сообщений: 147

Как проверить, что есть поле селект у товара
Здравствуйте.

Общими усилиями для страницы написал скрипт abv347.js, который с помощью функции $('.addtocart-button').on('click', function() проверяет, выбрано ли значение из выпадающего списка с типом багета картины. Скрипт хорошо отрабатывает на странице с детальным описанием товара, где может существовать только один выпадающий список с id = baget_select.

Если кликнуть на кнопку добавить в корзину на выше указанной странице категории товаров для товара, у которого нет возможности выбора типа багета, то скрипт сходит с ума, видя другие селекты с id = "baget_select". Как написать условие $('.addtocart-button').on('click', function(), которое бы проверяло, есть ли поле селект с выбором типа багета только у того товара, под которым была нажата кнопка с class="addtocart-button"?
Ответить с цитированием
  #2 (permalink)  
Старый 29.03.2014, 13:58
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

На странице в принципе не должно быть нескольких элементов с одинаковым id. На то он и идентификатор, чтобы быть уникальным.
Вот костыли для проверки наличия селекта багетов:
var hasBagetSelection = $(this.form).find('#baget_select').length > 0;
if (hasBagetSelection) { alert('есть') } else { alert('нет') };
Ответить с цитированием
  #3 (permalink)  
Старый 22.04.2014, 16:07
Аватар для borus
Кандидат Javascript-наук
Отправить личное сообщение для borus Посмотреть профиль Найти все сообщения от borus
 
Регистрация: 07.12.2012
Сообщений: 147

Сообщение от jsnb Посмотреть сообщение
На странице в принципе не должно быть нескольких элементов с одинаковым id. На то он и идентификатор, чтобы быть уникальным.
Вот костыли для проверки наличия селекта багетов:
var hasBagetSelection = $(this.form).find('#baget_select').length > 0;
if (hasBagetSelection) { alert('есть') } else { alert('нет') };
благодарю, исправлю, проморгал задвоение id.

Тестирую на локальном сервере. Условие не срабатывает верно. Воспользовался отладчиком Хрома, поставил точку останова на
var hasBagetSelection = $(this.form).find('#baget_select').length > 0;

он указывает, что this на этой строке это span.addtocart-button, видимо поэтому hasBagetSelection всегда = false. Выпадающий список с типом багета находится в другой ветке DOM насколько понимаю, судя по принтскрину:

Как можно добраться и проверить наличие #baget_select в соседней ветке DOM?
Ответить с цитированием
  #4 (permalink)  
Старый 22.04.2014, 16:22
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от borus
var hasBagetSelection = $(this.form).find('#baget_select').length > 0;
Зная ИД элемента, ничего искать не нужно...
Обращайся сразу
$('#baget_select')
Ответить с цитированием
  #5 (permalink)  
Старый 22.04.2014, 16:24
Профессор
Отправить личное сообщение для depp Посмотреть профиль Найти все сообщения от depp
 
Регистрация: 22.04.2014
Сообщений: 151

используйте вместо #baget_select => .baget_select
к спискам с баггетами добавьте class="baget_select"
Ответить с цитированием
  #6 (permalink)  
Старый 22.04.2014, 16:52
Аватар для borus
Кандидат Javascript-наук
Отправить личное сообщение для borus Посмотреть профиль Найти все сообщения от borus
 
Регистрация: 07.12.2012
Сообщений: 147

Сообщение от ksa
Зная ИД элемента, ничего искать не нужно...
просто на странице несколько таких baget_select и нужно проверить наличие этого поля у того товара, под которым и была нажата кнопка "Добавить в корзину", которая запустила весь этот "триггер"

Последний раз редактировалось borus, 22.04.2014 в 17:08.
Ответить с цитированием
  #7 (permalink)  
Старый 22.04.2014, 17:12
Аватар для borus
Кандидат Javascript-наук
Отправить личное сообщение для borus Посмотреть профиль Найти все сообщения от borus
 
Регистрация: 07.12.2012
Сообщений: 147

Сообщение от depp
используйте вместо #baget_select => .baget_select
к спискам с баггетами добавьте class="baget_select"
а вот это почему-то не сработало...
Ответить с цитированием
  #8 (permalink)  
Старый 22.04.2014, 17:17
Профессор
Отправить личное сообщение для depp Посмотреть профиль Найти все сообщения от depp
 
Регистрация: 22.04.2014
Сообщений: 151

я вкратце объясню, так как не знаю ваш код.
вы вызываете событие
$('.addtocart-button').click(function(){
//внутри есть объект this
$(this).parent().prev(). //по моему такой путь до блока с выбором типа багета
find('.baget_select'); // вот вам ваш объект. далее делаете с ним что хотите.
});
Ответить с цитированием
  #9 (permalink)  
Старый 22.04.2014, 17:58
Аватар для borus
Кандидат Javascript-наук
Отправить личное сообщение для borus Посмотреть профиль Найти все сообщения от borus
 
Регистрация: 07.12.2012
Сообщений: 147

Сообщение от depp Посмотреть сообщение
я вкратце объясню, так как не знаю ваш код.
вы вызываете событие
$('.addtocart-button').click(function(){
//внутри есть объект this
$(this).parent().prev(). //по моему такой путь до блока с выбором типа багета
find('.baget_select'); // вот вам ваш объект. далее делаете с ним что хотите.
});
то, что надо, спасибо.
А как определить у элемента, нажатие по которому было совершено и функция для которого сейчас выполняется, наличие/отсутствие класса с определённым именем?
Ответить с цитированием
  #10 (permalink)  
Старый 22.04.2014, 18:00
Профессор
Отправить личное сообщение для depp Посмотреть профиль Найти все сообщения от depp
 
Регистрация: 22.04.2014
Сообщений: 151

$('element').click(function(){
    $(this).hasClass('class_name'); // true, если есть, false - если нет
});

Последний раз редактировалось depp, 22.04.2014 в 18:03.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сравнить сессию и то, что введено в поле Nailya Общие вопросы Javascript 20 17.06.2013 18:08
как сделать что бы при открытии страницы сразу открылось большое фото oksanaweb Общие вопросы Javascript 1 05.06.2013 02:17
Как ввести в поле ввода значение где есть javascript MOZG Общие вопросы Javascript 8 19.04.2013 10:28
Кто как учит/учил/ будет учить Английский ? DjDiablo Оффтопик 53 18.12.2012 21:01
Как проверить на этом-ли хостинге стоит сайт из определнного домена? Gamestop Серверные языки и технологии 3 05.11.2012 06:51