Как лучше поставить обработчики после подгрузки AJAX-ом?

После загрузки контента AJAX-ом не работают обработчики. Я думаю что наилучшим вариантом будет поставить одиг обработчик на "body" и там уже ловить елементы через "event.target". Хочу услышать мнение более опытных разработчиков как лучше решить мою проблему?
  • Вопрос задан
  • 2258 просмотров
Пригласить эксперта
Ответы на вопрос 2
$('body').on('click','.class',function(){
    // Так будет работать с новым контентом!
})
Ответ написан
Kwisatz
@Kwisatz
Больше web-приложений, хороших и разных
попробуйте поставить на body. Если вам этого будет хватать, то почему нет? Если будет не хватать, разнесете уже в процессе. У меня на body стоят всевозможные универсальные штуки, но иногда есть желание вызвать обработчик до того как событие всплывет до body. Тут два варианта, либо в разметке onClick и т д Либо анализировать вставляемый контент. У меня так развешиваются обработчики для хитрых динамических графиков и таблиц.

Вот пример взял посложнее, я использую этот статический класс для регистрации обработчиков и последующего вызова, вот он примерно(взяты кускт двух разных классов):
ajax.answerParse=function()
  {
  if ((this.target) && (this.answer.html!==null))
    {
    this.target.innerHTML=this.answer.html;
    //experimental
    contentHandlers.placeAll(this.target);
    }     
  }
contentHandlers.placeAll=function(targetObj)
  {
  for (var i=0, len=this.collection.length; i<len; i++) 
    {
    this.placeCurrent(targetObj, this.collection[i]);
    }
  }
contentHandlers.placeCurrent=function(targetObj, handlerObj)
  {  
  var handlerTargets=targetObj.querySelectorAll(handlerObj.selector);
  for (var i=0,len=handlerTargets.length; i<len; i++)
    {
    if (handlerObj.event)
      {
      handlerTargets[i].addEventListener(handlerObj.event, handlerObj.handler.bind(handlerObj, handlerTargets[i]));
      }
    else
      {
      handlerObj.handler.call(handlerObj, handlerTargets[i]);
      }
    }
  }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы