Javascript Подскажите как узнать родительский елемент

12
D
На сайте с 20.09.2010
Offline
175
921

Есть такой код

<label><input type="checkbox" value="4" name="main" class="main_ch" data-id="22"><span>Специальная техника</span></label>

<div class="bodyTypesContainer inner">

<label><input type="checkbox" name="checkbox[10]" data-id="11" value="11" class="ch_spec ch"><span>Автоцистерна</span></label>

<label><input type="checkbox" name="checkbox[11]" data-id="12" value="12" class="ch_spec ch"><span>Автовоз</span></label>

</div>

Как при клике на ch_spec чекбокс узнать data-id main_ch чекбокса?

CP
На сайте с 12.08.2009
Offline
101
#1

Некрасивое решение, но до жути простое.

<label><input type="checkbox" name="checkbox[11]" data-id="12" data-main='22" value="12" class="ch_spec ch"><span>Автовоз</span></lab

Профессиональный frontend: JS, html,css, Single-Page App (/ru/forum/964386)
[Удален]
#2


$(document).ready(function(){
$('.ch_spec').click( function() {
alert( $(this).parent().parent().prev().children('.main_ch').data('id') );
});
});

а вообще Content-pro, все верно сказал, заведите еще одно поле data

W
На сайте с 09.04.2013
Offline
46
#3


$(document).ready(function(){
$('.ch_spec').click( function() {
alert( $('.main_ch').data('id'));
});
});
CP
На сайте с 12.08.2009
Offline
101
#4
webjey:
$(document).ready(function(){
$('.ch_spec').click( function() {
alert( $('.main_ch').data('id'));
});
});

Не проканает, как я понял родительских элементов будет несколько.

W
На сайте с 09.04.2013
Offline
46
#5
Content-pro:
Не проканает, как я понял родительских элементов будет несколько.

Да, все верно. Если несколько элементов, подойдет код imagine.

Вот так еще можно:


$(document).ready(function(){
$('.ch_spec').click( function() {
alert($(this).closest('div').prev().find('.main_ch').data('id'));
});
});
LH
На сайте с 26.09.2013
Offline
89
#6

<input id="mainCh" type="checkbox" value="4" name="main" class="main_ch" data-id="22"><span>Специальная техника</span>


<div id="mainDiv" class="bodyTypesContainer inner">

<input type="checkbox" name="checkbox[10]" data-id="11" value="11" class="ch_spec ch"><span>Автоцистерна</span>

<input type="checkbox" name="checkbox[11]" data-id="12" value="12" class="ch_spec ch"><span>Автовоз</span>

</div>

<script>
var mainCh = document.getElementById('mainCh');
var mainDiv = document.getElementById('mainDiv');
mainDiv.addEventListener('click', function(e) {
if ( e.target.className = 'ch_spec' ) {
e.preventDefault();
alert(mainCh.getAttribute('data-id'));
}
}, false);
</script>
I2
На сайте с 07.03.2015
Offline
38
#7
Leonid H:
<input id="mainCh" type="checkbox" value="4" name="main" class="main_ch" data-id="22"><span>Специальная техника</span>


<div id="mainDiv" class="bodyTypesContainer inner">

<input type="checkbox" name="checkbox[10]" data-id="11" value="11" class="ch_spec ch"><span>Автоцистерна</span>

<input type="checkbox" name="checkbox[11]" data-id="12" value="12" class="ch_spec ch"><span>Автовоз</span>

</div>

<script>
var mainCh = document.getElementById('mainCh');
var mainDiv = document.getElementById('mainDiv');
mainDiv.addEventListener('click', function(e) {
if ( e.target.className = 'ch_spec' ) {
e.preventDefault();
alert(mainCh.getAttribute('data-id'));
}
}, false);
</script>

у вас опечатка в условии, код будет выполняться всегда "=" не катит, нужно "==" мы же сравниваем, а не присваиваем.

Качественная верстка PSD макетов (/ru/forum/974524)
LH
На сайте с 26.09.2013
Offline
89
#8

<input id="mainCh" type="checkbox" value="4" name="main" class="main_ch" data-id="22"><span>Специальная техника</span>


<div id="mainDiv" class="bodyTypesContainer inner">

<input type="checkbox" name="checkbox[10]" data-id="11" value="11" class="ch_spec ch"><span>Автоцистерна</span>

<input type="checkbox" name="checkbox[11]" data-id="12" value="12" class="ch_spec ch"><span>Автовоз</span>

<input type="checkbox" name="checkbox[11]" data-id="12" value="12" class="ch_test ch"><span>Автовоз</span>

</div>

<script>
var mainCh = document.getElementById('mainCh');
var mainDiv = document.getElementById('mainDiv');

mainDiv.addEventListener('click', function(e) {

if ( e.target.classList.contains('ch_spec') ) {
e.preventDefault();
alert(mainCh.getAttribute('data-id'));
}

}, false);
</script>
W
На сайте с 09.04.2013
Offline
46
#9

Кстати да,еще вариант на чистом javascript


document.addEventListener("DOMContentLoaded", function () {
[].forEach.call(document.querySelectorAll('.ch_spec'), function (el) {
el.addEventListener('click', function(e) {
alert(e.target.closest('div').previousElementSibling.querySelector('.main_ch').getAttribute('data-id'));
}, false);
});
});
Brand from Amber
На сайте с 18.08.2007
Offline
293
#10

datum, по-моему, атрибут "data-id" для инпута это нечто невалидное. Да и не нужен он т.к. почти везде дублирует value.

Лучший способ понять что-то самому - объяснить это другому.
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий