2013-02-12 2 views
0

У меня есть специальный pb: я создаю на лету ajax-запрос некоторых списков и divs класса 'myclass', затем нажимаю на них, я называю это, который добавляет некоторый url в область ввода, а затем добавляет источник к IFRAME, отображение во всплывающем окнеСлишком много раз срабатывает триггер событий - JQuery

$(document).on("click", "li .myclass", function() { 
    var uri = $(this).closest('li').attr("id"); 
    var embed = 'https://www.youtube.com/embed/'; 
    $('#myinput').val(val + uri); 
    $('#wrapper iframe').attr('src', embed + uri); 
}); 

затем по клику на кнопку всплывающее окно, я вызвать щелчок на #mybutton, которые создают некоторый текст-зону

$(document).on("click", ".popup button", function() { 
    event.preventDefault(); 
    $('#mybutton').trigger('click'); 
    $('#myinput').val(''); 
}); 

Моя проблема в том, что в первый раз я нажимаю «li». myclass 'он создает чисто одну текстовую зону. Но если я нажму второй раз, он создаст три текстовые зоны, затем, если я нажму третий раз, он создаст 6 текстовых зон. Я действительно не понимаю этого брежа, может ли кто-нибудь помочь?

+0

Скорее всего, вы привязываете свою вторую часть кода при каждом нажатии кнопки #mybutton, что приводит к дублированию привязок. –

+0

показать HTML ... –

+0

@KevinB на самом деле дополнительная текстовая зона создается, как только я нажимаю «li .myclass» ... – Newben

ответ

3

Попробуйте заменить это:

$(document).on("click", "li .myclass", function() { 

С этим:

$("li .myclass").on("click", function() { 

Путь вы используете on метод JQuery с 'селектор' парам немного опасно. Это требует понимания Event Bubbling и является вероятным источником запуска нескольких событий.

+0

У меня такая же проблема, зная, что, так как я создаю свой список на лету() не запускает какое-либо событие, поэтому я попытался использовать устаревший live() (и он все еще не работает) – Newben

+0

Создание элементов dom на лету и добавление событий к ним немного сложно. Вы должны явно добавить обработчик событий к новым элементам и быть осторожным, чтобы вы не добавляли повторяющиеся обработчики событий к ранее существующим элементам. Но боюсь, что в этом вопросе не так много информации. – KevSheedy

0

Мы должны остановитьPropagation() Чтобы избежать щелчков триггеров события слишком много раз.

$(this).find('#cameraImageView').on('click', function(evt) { 
evt.stopPropagation(); 
console.log("Camera click event."); 
}); 
Смежные вопросы