Попытка получить значение ближайшего окна выбора, когда пользователь нажимает на ссылку рядом с ней.
Он возвращает undefined в консоли
<select name="songSelection_amclaughlin" class="songSelection_input">
<option value="">SELECT ITEM</option>
<option value="value 1">value 1</option>
<option value="value 2">value 2</option>
<option value="value 3">value 3</option>
</select>
<span class="vote-btns">
<a href="#" class="button fb grey">Vote</a>
<a href="#" class="button tw grey">Vote</a>
</span>
//js
$(document).ready(function() {
$("a.button").click(function(event) {
console.log($(this).closest('select').val());
});
});
Выбор не является родителем якорей, а closest()
предназначает только родителям и находит ближайший, соответствующий селектору.
$(this).closest('span').prev('select').val()
То, что вы, вероятно, хотите, - это найти ближайший промежуток, а затем предыдущий select
Выбор элементов на основе структуры DOM - очень хрупкая стратегия - любое изменение DOM приведет к сбою кода. У элемента управления есть имя, так почему бы не использовать его?
$('select[name=songSelection_amclaughlin]').val();
или без jQuery:
document.querySelector('select[name=songSelection_amclaughlin]').value;
При необходимости добавьте класс в селектор. Теперь структура DOM может быть любой, и выбор все равно будет найден.
$(document).ready(function() {
$("a.button").click(function(event) {
console.log($(this)
.parents('.vote-btns')
.prev('select')
.find('option[selected]').attr('value'));
});
});
или
$(document).ready(function() {
$("a.button").click(function(event) {
console.log($(this)
.parents('.vote-btns')
.prev('select')
.value());
});
});