2013-10-28 3 views
0

Как мы можем вызвать обратный вызов для того же самого ребенка из родителя? У меня есть сценарий, как указано ниже:
HTMLПереключение между тем же дочерним и родительским в jquery

<div id="abc123"> 
<ul id="pqr"> 
    <span class="abc">ChildA</span> 
    <span class="xyz">ChildB</span> 
</ul> 

яваскрипта

$(document).ready(function() 
{ 
    $('.abc, .xyz').parent().click(function() 
    { 
     alert($(this).children().attr("class")); 
    }); 
}); 

HTML выход:

ChildA ChildB 

Всякий раз, когда я нажав на childâ это дает мне правильный вывод, как аЬс, но когда я нажав на childB снова нацеливания на 1 ребенка и давая его атрибут, как аЬс
Есть ли способ для таргетинга на тех же детей, к которым я нажал?

+0

удалить 'родителя()' – coolguy

+0

есть ли способ, без удаления родителя()? – agpt

+0

что вы ожидаете, когда вы нажимаете на 'childB' –

ответ

2

Вы можете это сделать, обращаясь к элементу DOM, который инициировал событие .:

$('.abc, .xyz').parent().click(function (e) { 
    alert($(e.target).attr("class")); 
}); 

Демо: Fiddle


event or e на самом деле event object и гарантированно передается обработчику событий. Большинство свойств исходного события копируются и нормализуются к новому объекту события.

e.target является одним из основных свойств события и является элементом, зарегистрированным для события или его потомком.

+1

awsome man ... thanks – agpt

+0

@palash вы попробуете объяснить немного об этом ** e ** аргументе и что это такое? цель' делать? – agpt

2

Попробуйте

$(document).ready(function() 
{ 
    $('.abc, .xyz').click(function() 
    { 
     alert($(this).attr("class")); 
    }); 
}); 
+0

нет способа ... так как мне нужно щелкнуть на родительском, а не на детей. – agpt

+0

Если вы хотите, чтобы слушатель на родительском, какие критерии вы хотите применить для предупреждения ребенка 1 или 2? –

+0

@GirishSakhare посмотреть на palash ответить – agpt

0
$(document).ready(function() 
{ 
    $('.abc, .xyz').parent().click(function(event) 
    { 
     alert(event.target.attr('class')); 
    }); 
}); 
0

Как насчет этого?

$("#pqr span").click(function() { 
    alert($(this).attr("class"); 
}); 
0

parent().children() возвращает массив с обоих элементов в нем (childâ и ChildB)

при вызове метода на этом массиве, он всегда использует первый элемент (childâ)

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

$(document).ready(function() 
{ 
    $('.abc, .xyz').click(function() 
    { 
     alert($(this).attr("class")); 
    }); 
}); 
+0

посмотреть на @palash ответить – agpt

0

Привязка события click к родительскому объекту, а затем поиск атрибутов его дочерних элементов даст вам те же результаты, что и вы, чтобы получить точный результат, либо вы можете сравнить имя класса, либо сравнить его по id.

Попробуйте

$(document).ready(function() 
{ 
    $('#pqr').find('span').click(function() 
    { 
     alert($(this).attr("class")); 
    }); 
}); 
Смежные вопросы