2012-01-08 4 views
1

Я использую jQuery, чтобы пользователи динамически добавляли и удаляли поля формы, но они не работают должным образом.Невозможно удалить динамически добавленный контент с помощью jQuery

Он отлично работает при удалении первого поля (которое жестко закодировано в HTML-разметке), но оно не позволит мне удалить любое из полей, которые были добавлены динамически.

Вот мой JQuery код:

$("#addDog").click(function(event) 
{ 
    event.preventDefault(); 

    var doglist = <?php echo "'" . $javadogs . "'"; ?>; 
    var newdog = '<div><select name="resDog[]" class="select">' + doglist + '</select><input type="text" class="shortinput" name="resResult[]" size="20" value="" /><a href="#" class="deleteDog"><img src="/admin/images/delete.png" alt="Remove dog" /></a></div>'; 
    $(this).parent().before(newdog); 
}); 

$(".deleteDog").click(function(event) 
{ 
    event.preventDefault(); 
    $(this).parent().remove(); 
}); 

Я попытался с помощью .on() функции JQuery, но это не сработало.

+1

Как выглядел ваш '$ .on()'? Синтаксис немного отличается от '$ .live()'. –

ответ

6

Вот как вы хотите использовать on

$(document).on("click", ".deleteDog", function(e) { 
    e.preventDefault(); 
    $(this).parent().remove(); 
}); 

В идеале все эти deleteDog кнопки будут размещены в какой-то контейнер. Если все эти кнопки должны были быть в DIV с идентификатором foo, вы бы более эффективно настроить такие события:

$("#foo").on("click", ".deleteDog", function(e) { 
    e.preventDefault(); 
    $(this).parent().remove(); 
}); 

Теперь, вместо того, чтобы каждый клик в любом месте документа, проверяемый, только те, клики, которые доходят до #foo.


Я предполагаю, что вы первоначально пытались использовать on так:

$(".deleteDog").on("click", function(e) { 
    e.preventDefault(); 
    $(this).parent().remove(); 
}); 

Это функционально идентично говоря:

$(".deleteDog").bind("click", function(e) { 
    e.preventDefault(); 
    $(this).parent().remove(); 
}); 

Опуская параметр выбора, как это создает непосредственно связанные события-только элементы, которые соответствуют селектору .deleteDog в то время on будет подключен.

Применение селектора типа в моем исходном коде, делает его делегирован событий JQuery будет слушать все клики, и если они происходят от элемента с классом deleteDog, функция срабатывает.

+0

hmm интересно, я только начал с jQuery, и то, что я делаю, это «определение функций» объекта jQuery, прежде чем добавить его в контейнер. [Здесь] (http://jsfiddle.net/KV6QD/1/) является примером того, как я буду иметь дело с тем, что, по моему мнению, похоже на поведение, которое пытается достичь ОП. Конструктивная критика оценили :-) –

+0

@Tom - ну кнопка удаления не работает, но в остальном это выглядит как интеллектуальная попытка. Разумеется, говоря: $ («...»). Click эквивалентен использованию bind, поэтому никогда не будет работать с динамически добавленным контентом, но в этом конкретном случае кнопки добавления и удаления являются статическими –

+0

@AdamRackis Я попытался заменить функцию удаления с тем, что вы предложили. $ (". newDog"). on ("click", ".deleteDog", функция (e) { e.preventDefault(); $ (this) .parent(). remove(); }); и с этим я также добавил класс под названием newDog к моему содержащему DIVs .. но он все равно не будет работать =/ – Tom

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