2012-02-06 8 views
-1

У меня есть некоторые странные проблемы с jQuery ajax. Я вызываю jQuery ajax-функцию событием .hover и работает отлично. Я получаю некоторый ответ, и я показываю этот ответ в div.Функция jQuery ajax не работает должным образом

Но если я хочу вызвать jQuery на <a>, который пришел как ответ от предыдущего jQuery ajax-звонка на событие .click, я не могу его назвать.

Может ли кто-нибудь помочь мне в этом?

Это функция Ajax Jquery ..

function call_jqry_ajx(file_name,show_div_id,function_name,parameter){ 
    $.ajax({ 
     type: "POST", 
     url: file_name, 
     data: parameter, 
     success: function(msg){ 
      alert("Data Saved: " + msg); //Anything you want 
      $("#show_div").html(msg); 
      alert("Done with div.."); 
     } 
    }); 
} 

    $(document).ready(function() 
    { 
    $(".a_class").click(function(){ 
     alert("double times called but still getting alert.. :)"); 
     return false; 
    }); 
}); 

в моем DIV я получаю ответ, как это ..

<div id="show_div"> 
     <a class="a_class" id="a_id">Call Anchor</a> 
</div> 

Я не могу выполнять мои функции JQuery по ссылке для тега

+0

Можете ли вы разместить свой код? Используете ли вы «живой» метод? – Hadas

+0

Вам нужно будет указать дополнительную информацию о своей проблеме, прежде чем кто-либо сможет сделать что-то другое, кроме того, что у вас есть дикая догадка. Например, покажите нам код jQuery, который вы используете для регистрации для события .click() ', и объясните, когда вы запустите этот код (до или после загрузки нового HTML). – jfriend00

+0

это весь код, который я разработал .. Вы можете мне помочь сейчас? –

ответ

2

Вы регистрируются для события click, прежде чем объект действительно присутствует на странице. Таким образом, он не получает назначенного ему обработчика события.

Чтобы исправить это, вы должны использовать либо .delegate() (для pre-jQuery 1.7), либо .on() (для jQuery 1.7+), чтобы использовать делегированную обработку событий. Это регистрирует событие на родительском объекте фактического содержимого, которое создаст событие. Вы выбираете родительский объект, который есть в начале, когда вы регистрируете событие, а затем пузырька события позволяет захватывать события во вновь созданных объектах.

Вы можете изменить свой код на этот:

$(document).ready(function() { 
    $('#show_div').on('click', '.a_class', function(){ 
     alert("double times called but still getting alert.. :)"); 
     return false; 
    }); 
}); 

Это регистрирует для click события на #show_div объекта, но только вызывает обработчик события, если событие произошло на объекте, который соответствует селектору .a_class. Таким образом, объекты внутри #show_div могут приходить и уходить, а обработчик событий останется на месте.

Для получения дополнительной информации о .on() см. jQuery doc. Это заменяет .live(), который теперь устарел, но используется как предпочтительный способ сделать это.

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