2015-03-26 6 views
1

Пожалуйста, прочитайте эту часть первой:
Оказывается, моя проблема в том, что кто-то использовало onclick="some javascript", что все мои стопоры события не расслышали.Unbind всех события от содержания, которое добавляется динамически с помощью AJAX

Я не нашел информацию по этой теме, должен ли это быть в сообществе wiki?


У меня есть содержание, которое имеет динамически загруженное содержимое, где я хочу отвязать событие:

примера

кода на INIT:

<div id="Wrap"></div> 

пример код после загрузки содержимого с помощью AJAX :

<div id="Wrap"> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
</div> 

Что я хочу:

  • .item может иметь какое-либо событие
  • Элемент загружается динамически с помощью AJAX
  • Он должен отвязать все события, и заменить его на один (< - это нет проблем)

Что я имею:

$(document).ready(handleWriteDisableds); 

$(window).load(handleWriteDisableds); // in doc ready 

$(document).ajaxComplete(handleWriteDisableds); 


function handleWriteDisableds(){ 
    $('.item').unbind() // remove all events set in doc-ready 

    $(document).on('click', '.item', function(e){ 
     e.preventDefault(); // prevent default behaviour 
     e.stopPropagation(); // Don't bubble up 
     alert('no can do'); 
     return false; // hardcore stopping stuff 
    }); 
} 

Что мне нужно:
Чтобы отвязать ВСЁ после того, как он динамически загружает.

Редактировать О, Оказывается, у нас есть кто-то, кто использовал атрибут onclick, которые, по-видимому, не прекращаются. Я обновлю, если у меня есть дополнительная информация

+0

так в чем проблема? разве вы не можете отменить все события? –

+0

Если вы используете делегирование, вам нужно отпереть родительский элемент, на который вы установили делегирование. –

+0

Я добавил еще немного кода в свой пример. События не отвязаны – Martijn

ответ

2

Попробуйте функцию jQuery off(), чтобы удалить событие, прикрепленное к динамически добавленному элементу. jQuery off()

Добавить это в обратном вызове ajax.

$('.item').off(); // with no arguments removes all handlers attached to the elements. 
+0

Что я не понимаю, зачем ему нужно снимать события только в начале, когда документ готов, когда еще не было связей вообще? –

+0

Это не будет работать для динамического контента. – Martijn

+0

И прочь примерно то же самое, что и unbind;) – Martijn

2

Попробуйте это. Это может помочь вам с этим быстрым решением. Это отвяжет все события.


EDIT:

Динамически добавленные элементы не будут иметь обработчик - то есть, в вашем случае новодобавленный DOM имеющий «.item» не будет работать, если вы не пересвязать обработчик. Итак, если вы динамически добавляете содержимое (через AJAX), то как ваш динамический контент получает связанный с ним обработчик?

Вам нужно выяснить, как он получает обработчик для динамического содержимого.

По умолчанию динамически добавленный контент не связан с ним обработчиком.


$(function() { 
 

 
    $(document).on('click', '.item', function(e) { 
 
    e.unbind(); 
 
    alert('no can do') 
 
    }); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="Wrap"> 
 
    <div class="item">Dynamic Content 1</div> 
 
    <div class="item">Dynamic Content 2</div> 
 
    <div class="item">Dynamic Content 3</div> 
 
</div>

+0

+1, Это техника, которую я не имею, хотя и о, хорошо. Я считаю, что моя проблема лежит где-то в другом месте, я обновлю свой ответ – Martijn

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

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