2013-09-18 1 views
1

Как получить переключатель show hide от щелчка детей или соединения, а не щелкнуть по родительскому?Toggle show скрыть других, используя дочерние или составные, а не родительские?

Я хочу переключить изображение A при нажатии на миниатюру A, а не от щелчка всего div. Спасибо.

HTML

<div> 
    <dl> 
    <dt>Thumbnail A</dt> 
    <dd>Name A</dd> 
    <dd>Price A</dd> 
    </dl> 

    <ul class="details"> 
    <li>Image A</li> 
    </ul> 
</div> 

JQuery

$(document).ready(function(){ 
    $('div').click(function() { 
    var then = $(".details", this) 
    $(then).toggle(); 
    $(".details:visible").not(then).hide(); 
    }); 
}); 

Ответы, даваемые от подобного Maverick, Дэвид Томас, j08691 и Tushar Гупта довольно действует один с помощью parent.siblings, но изначально я 'Пробовал использовать такое соединение:

$('div dl dt').click(function(){ 

Но это не сработает. Я считал, что это имеет какое-то отношение к вар.

Но, пожалуйста, имейте в виду, что мне действительно нужно, чтобы переключатель был закрыт, когда другие переключатели открываются и закрываются, когда нажимают на «Эскиз А» и т. Д., То есть dt, а не div.

Соединение само по себе прекрасно работает, но это то, чего я хочу достичь. Здесь идет оригинальная.

Fiddle

http://jsfiddle.net/pandaktuai/v46zA/

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

Fiddle

http://jsfiddle.net/pandaktuai/Jeb86/

Я надеюсь, что я показал свое минимальное понимание этой проблемы и многом благодаря, если вы можете оказать мне hand.Thanks.

ответ

3

Просто modefy ваши JS в этом

$(document).ready(function(){ 
$('dt').click(function(){ 

var then = $(this).parent().siblings(".details"); 
$(then).toggle(); 
$(".details:visible").not(then).hide(); 
}); 

}); 

Пример: http://jsfiddle.net/Jeb86/1/

+0

Привет, Маверик, спасибо. Я не могу сказать спасибо, могу ли я просто оценить все ответы ваших парней. Опять же, спасибо. – pandaktuai

0

Try:

$(document).ready(function() { 
    $('dt').click(function() { 
     var then = $(this).parent().siblings(".details"); 
     $(this).parent().next().toggle(); 
     $(".details:visible").not(then).hide(); 
    }); 
}); 

jsFiddle example

+0

j08691, спасибо. Да, я скопирую пасту из моего ответа выше, но на самом деле, спасибо Я не могу сказать спасибо, могу ли я просто оценить все ответы ваших парней. Опять же, спасибо. – pandaktuai

0

DEMO

$(document).ready(function() { 
    $('div').find('dl dt').click(function (e) { 
     var then = $(this).closest('div').find(".details"); 
     $(then).toggle(); 
     $(".details:visible").not(then).hide(); 
    }); 
}); 
+1

Tushar Gupta, спасибо. Да, я скопирую пасту из моего выше ответа снова, но на самом деле, спасибо Я не могу сказать спасибо, могу ли я просто оценить все ответы ваших парней. Опять же, спасибо. – pandaktuai

1

Я лично предлагаю:

$(document).ready(function() { 
    // selecting the 'dt' element(s), 
    // using the 'click()' method to handle the 'click' events: 
    $('dt').click(function(){ 
     // moving up through the ancestors to find the first ancestor 'div' 
     // finding the '.details' element(s) within that 'div' ancestor 
     // toggling its visibility (hiding if it's visible, showing if it's hidden): 
     $(this).closest('div').find('.details').toggle(); 
    }); 
}); 

JS Fiddle demo.

Если, как это было предложено (в комментариях ниже) by j08691, это необходимо, что нажатие показывает один.details элемент должен скрыть другие (а также переключая видимость соответствующего .details элемента):

$(document).ready(function() { 
    $('dt').click(function(){ 
     var target = $(this).closest('div').find('.details').toggle(); 
     $('.details').not(target).hide(); 
    }); 
}); 

JS Fiddle demo.

Ссылки:

+0

Это не работает как щелчок Thumbnail A, затем Thumbnail B показывает оба. – j08691

+0

Честно говоря, я не видел этого требования в вопросе. –

+0

ОП не объяснял это, но если вы посмотрите на его код, в частности, назначение переменной 'then' плюс' $ (". Details: visible"). Not (then) .hide(); 'довольно ясно, что он хочет чтобы скрыть миниатюры, которые не были нажаты. – j08691

 Смежные вопросы

  • Нет связанных вопросов^_^