проблема в понимании селекторов JQuery - PullRequest
1 голос
/ 04 февраля 2011

например, если я нажму на добавление + 9 раз, у меня будет 10 ящиков.но после этого, только если A щелкните по последнему полю, оно будет скрыто.(Я хочу скрыть конкретное поле, нажав на это поле).кстати после того, как щелкнул (и удалил) последний ящик, другой ящик никак не скроется, в чем моя проблема?

$(document).ready(function(){
    $("#add").click(function(){
        $(".test:last").clone().insertAfter(this);
    })
    $(".test").click(function(){
        $(this).hide("slow");
    })
})

<div id="add">ADD+</div>
<div class="test" style="border:1px solid black; width:70px; height:25px;">
    box
</div>

Ответы [ 4 ]

4 голосов
/ 04 февраля 2011

Потому что вы подключаете только тот, который существует при загрузке документа. Изменение

$(".test").click(function(){
    $(this).hide("slow");
})

до

$(".test").live('click', function(){
    $(this).hide("slow");
});

click предназначен для подключения событий к элементам, которые уже существуют . Используя live, вы можете быть более умозрительным и говорить «подключите это событие к любому, что уже существует, и к любому, что я добавлю позже, которое соответствует этому селектору» Также есть delegate, который может быть полезен, если вам нужна функциональность live, но одна для потомков определенного элемента.

подробности:

3 голосов
/ 04 февраля 2011

Используйте .clone(true) вместо .clone() для копирования обработчиков событий.

Пример: http://jsfiddle.net/hQ5Qc/


Я бы также добавил, что вы можете изменить селектор из этого:

$(".test:last")

к этому:

$(".test:visible:last")

поэтому, если вы прячете последнюю коробку, вы не клонируете уже скрытую.

Пример: http://jsfiddle.net/hQ5Qc/2/

0 голосов
/ 04 февраля 2011
$(document).ready(function(){
    $(".test").click(function(){
         $(this).hide("slow");
    })

    $("#add").click(function(){
         $(".test:visible:last").clone(true).insertAfter(this);
    })
})

добавлено :visible за комментарий

0 голосов
/ 04 февраля 2011
  1. Вы должны уделять больше времени написанию вопросов для исправления орфографии и грамматики.
  2. Этот вопрос задавался ранее многими способами.
  3. Посмотрите на jQuery API для live , делегат или клон
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...