jQuery live () для removeAttr ()? - PullRequest
0 голосов
/ 03 февраля 2011

Мне нужно использовать removeAttr для элементов, которые могут быть загружены через ajax. Есть ли способ сделать это автоматически, аналогично тому, как вы можете автоматически связывать события с помощью live ()?

ПРИМЕЧАНИЕ. У меня нет контроля над библиотеками JavaScript, которые выполняют вызовы ajax.

Ответы [ 3 ]

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

это создает новое событие для всех элементов сейчас и в будущем, которые имеют ваш «нежелательный атрибут», затем мы запустим его, чтобы запустить и выполнить свою работу.

$("mySelector").live("myRemoveAttrEvent", function(event){
     $(this).removeAttr("myAttr");
});

на успешном ajaxфункция вызова

// quick jQ ajax, the important part is on success
$("div").load("url", function(data, status, xhr){
   ..do work..
// this is the important part
   $("mySelector").trigger("myRemoveAttrEvent");
});

если у вас нет контроля над всем ajax, вы должны добавить пользовательские события, вызывающие срабатывание ajax ... это грязно: // события, которые вы считаете причинойнеуправляемый огонь, например, изменение

$("*").change()(function(event){
       $("mySelector").trigger("myRemoveAttrEvent");
});
3 голосов
/ 03 февраля 2011

Вы можете использовать complete вариант запроса $.ajax следующим образом:

$.ajax({
  ......
  complete:function(){
    $('selector').removeAttr('attribute here');
  }
});
2 голосов
/ 03 февраля 2011

То, что вам нужно, это обработать это во время загрузки этих элементов, что будет в обратном вызове success для вашего вызова AJAX:

$.ajax({
  // your details
  success: function(html){
    $('a', html).removeAttr('title');
    $('body').append(html);
  }
});

Обновление : Если у вас нет контроля над тем, что делает вызовы AJAX, и он не предоставляет никаких перехватчиков или обратных вызовов, вам нужно будет найти другое событие для привязки, чтобы выполнить это действие. В зависимости от того, как эти элементы вставляются на страницу и что именно вы делаете с ними, вы можете использовать делегат следующим образом (только предположение):

$('body').delegate('p', 'load', function(){ /* remove attr */ });

Я не знаю каких-либо событий, которые запускаются при изменении DOM или отдельного элемента. Вы можете попробовать load, но я не думаю, что он вызывается в случае загрузки и вставки AJAX-элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...