Функция Jquery не загружается после обновления div с помощью Ajax

#php #jquery #ajax #html #refresh

#php #jquery — запрос #аякс #HTML #обновить #jquery #ajax

Вопрос:

У меня есть несколько divs, которые обновляются с помощью Ajax после того, как пользователь нажимает на ссылку на странице.

Вот мой код для Ajax refresh div:

 <script type="text/javascript"><!-- AJAX CALL FOR MY PICTURES -->
$(document).ready(function() {
$('#pictures_wrapper a.delete_image').live('click', function(e){
     $('#pictures_wrapper').load( $(this).attr('href')   ' #pictures_wrapper' );     
     e.preventDefault(); 
}); 
});
</script>
  

На этой же странице я загружаю этот эффект Jquery:

 <script type="text/javascript"><!-- HOVER OVER ITEMS CHANGE BG COLOR -->
$(document).ready(function() {
$(".item_control_box").hide();
    jQuery('.each_item_container').hover(function() {
        jQuery(this).find('.item_control_box').show()
    }, function() {
        jQuery(this).find('.item_control_box').hide();
    });
});
</script>
  

Моя проблема заключается в том, что когда пользователь нажимает на ссылку, чтобы обновить Divs, этот эффект jquery прерывается и больше не работает. Я думаю, что мне нужно каким-то образом «перезагрузить» эту функцию, поскольку перезагружается только div, а не вся страница. Как я могу сохранить работу этой функции Jquery после обновления div?

Комментарии:

1. похоже, вам тоже нужно использовать событие live on hover .

Ответ №1:

Вы должны использовать функцию обратного вызова при загрузке, это означает, что вы отзываете jquery после завершения загрузки.

 $('#pictures_wrapper').load( $(this).attr('href')   ' #pictures_wrapper', , function () { //hover effect function } );
  

Надеюсь, это поможет 🙂

Комментарии:

1. привет, пожалуйста, обратитесь к api.jquery.com/load Код, который я здесь просто показываю в качестве ссылки, я не проверяю синтаксис, но я решаю подобную ситуацию этим 🙂

Ответ №2:

Ваш код должен работать, если вы измените свои .bind() вызовы на .live() :

 jQuery('.each_item_container').live('mouseenter', function() {
    jQuery(this).find('.item_control_box').show()
}).live('mouseleave', function() {
    jQuery(this).find('.item_control_box').hide();
});
  

.hover() это то же самое, что использовать .bind('mouseover', function () {...}) и .bind('mouseout', function () {...})

Если вы хотите привязать обработчики событий к элементам, которых еще нет в DOM, вы можете использовать .live() или .delegate() : http://api.jquery.com/live /, http://api.jquery.com/delegate /

Прикрепите обработчик событий для всех элементов, которые соответствуют текущему селектору, сейчас и в будущем.

Начиная с jQuery 1.7, вы должны использовать .on() as .bind() , .live() и .delegate() являются устаревшими: http://api.jquery.com/on /

Комментарии:

1. Я думаю, что это маршрут, которым мне нужно воспользоваться, но когда я обновил свой код и навел курсор на div, он не показывает .item_control_box

Ответ №3:

Лучше поместить код в пользовательскую функцию с именем

 function effectLoad(){

$(".item_control_box").hide();
    jQuery('.each_item_container').hover(function() {
        jQuery(this).find('.item_control_box').show()
    }, function() {
        jQuery(this).find('.item_control_box').hide();
    });

}
  

затем поместите функцию в вашу функцию успеха ajax

  $.ajax({
            url: 'your_php_file.php',
            type: 'POST',
            data:formData,
            success: function(response)
            {

                $("#formbox").html(response);

                  effectLoad();

            }

        });
  

Надеюсь, это сработает.

Спасибо

Ответ №4:

как упоминал @Guillaume Cisco в комментариях, вам необходимо повторно привязать эффект наведения к динамически вставляемым элементам в DOM, вы можете сделать это следующим образом

 $(".item_control_box").live(
{
mouseenter:function(){
jQuery(this).find('.item_control_box').show();
},
mouseleave:function(){
jQuery(this).find('.item_control_box').hide();
}
});