2013-05-26 3 views
0

Я полагаю, что заголовок несколько вводит в заблуждение, но я не знал, как это сделать.Как получить доступ к функции внутри функции jQuery

У меня есть функция, которая позволяет отображать небольшое всплывающее окно при нажатии ссылки (сообщение о подтверждении того, удалять или нет статью).

У меня также есть функция, которая отправляет данные в файл php и вставляет данные, которые я получаю (также список статей) обратно в элемент div.

Когда я пытаюсь использовать функцию для подтверждения удаления в списке статей, которые я изначально генерировал с помощью PHP, все работает, однако, когда я пытаюсь щелкнуть ссылку (по существу такую ​​же) внутри списка статей, которые я вставил в div с jquery, функция не работает (т. е. сообщение подтверждения не появляется).

Я предполагаю, что это связано с тем, что ссылка вставлена ​​после загрузки файла js, но есть ли способ сделать эту функцию глобальной, чтобы она также работала над материалом, который я вставляю позже?

$('.delete').click(function() { 
    var link = $(this).attr('href'); 
    $('#dialog') 
     .attr('title', 'Do you want to delete this article?') 
     .text('If you click Delete, the entire article and all comments attached to it will be erased.') 
     .dialog({ 
      buttons: { 
       'Delete': function() { window.location.href = link; }, 
       'Cancel': function() { $(this).dialog('close'); } 
      }, 
      closeOnEscape: true, 
      draggable: false, 
      resizable: false, 
      show: 'drop', 
      hide: 'drop', 
      modal: true 
     }); 
}); 
+1

Можете ли вы показать пример кода? – lurker

+0

у вас есть несколько вариантов: 1. использовать onclick, 2. после того, как вы вставляете HTML-код в страницу - вам придется привязать кнопку к функции JS. 3. сгенерируйте элементы DOM и добавьте их. вы можете связать до или после того, как вы добавите – galchen

+0

Не вставляйте комментарии в код, а затем редактируйте свой вопрос ... –

ответ

0

Вы можете использовать прямую функцию JQuery перед присоединением события вашей ссылки: http://api.jquery.com/live/

Вы можете так же слушать нажмите событие на общее ancester элементов и посмотреть, если целенаправленные элемент ссылки вы ожидаете :

commonAncestor.click(function(e){ 
if('A'==e.target.nodeName) 
    // do what you want to 
}); 
+0

live is revrecated, .on() это способ пойти сейчас –

+0

спасибо, не использовал jquery какое-то время. В любом случае, прослушивание событий на общем предке намного быстрее. – nfroidure

+1

На самом деле они могут быть медленнее: _Удаление многих делегированных обработчиков событий в верхней части дерева документов может ухудшить производительность.Каждый раз, когда происходит событие, jQuery должен сравнивать все селекторы всех присоединенных событий этого типа с каждым элементом пути от целевой цели до вершины документа. Для лучшей производительности присоедините делегированные события в местоположении документа как можно ближе к целевым элементам. – claustrofob

2

Вам необходимо прослушивать событие, используя .on() метод JQuery (руководство - jquery.com).

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

Быстрый пример будет:

$("div.parent_of_button").on("click", ".class-of-button", function(event){ 
    $(this).text('clicked!'); 
}); 

Что это означает, что все элементы класса .class-of-button, что вы будете добавлять после загрузки страницы, будут реагировать на щелчки.

редактировать

Иногда это помогает, если .on() прикрепляется к родителю всех динамически создаваемых элементов, а затем элемент вы ориентируетесь является вторым атрибутом метода .on(), как в примере.

+0

OK Я изменил свой код на '' $ ('. Delete'). On («click», function (event) { \t var link = $ (this) .attr ('href'); \t $ ('# dialog'). Attr ('title', 'Вы хотите удалить эту статью?'). Text ('Если вы щелкните . Удалить, вся статья и все комментарии прилагается к нему будут удалены.) диалоговые ({кнопки: { \t \t 'Удалить': функция() { \t \t window.location.href = ссылка; \t}, 'Cancel': function() { \t \t $ (этот) .dialog ('close'); \t}}, closeOnEscape: true, draggable: false, resizable: false, show: 'drop', hide: 'drop', modal: true}); }); '', но он по-прежнему работает только для содержимого, созданного серверной стороной – user2209024

+0

Все еще не работает. Вы имеете в виду прямого родителя? каждая из моих ссылок на удаление находится в соответствующем меню под названием div. Должен ли я настроить таргетинг на этот или один div, в котором все мои ссылки на удаление? – user2209024

+0

@ user2209024, если он выше, чем кнопка в цепочке DOM, он должен работать. Попробуйте 'console.log ('hello')' in inside '.on()' и посмотрите, не получаете ли что-либо от динамически добавленных элементов. –

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