Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Необновляемый блок div (https://javascript.ru/forum/jquery/23812-neobnovlyaemyjj-blok-div.html)

ZeroxNeron 07.12.2011 12:44

Необновляемый блок div
 
Добрый день!
Появилась такая задача: есть сайт. Надо, чтобы при переходах на другие страницы, один блок <div> (содержится на всех страницах) не обновлялся. Там будет Flash-проигрыватель (музыка). Я уже видел подобную вещь на "вконтакте.ру". Там сейчас плеер и чат не меняет своего положения. Т.к. с jQuery почти незнаком обращаюсь к вам.
Сделал так
jQuery(function($){
         $('a').attr('onclick','return false;').click(function(){
             var href = $(this).attr('href');
             $('.wrapper').load(href+' .content', function(){
                 history.pushState(null, null, href);
             });
         });
     });

Первый раз переходит - вроде все нормально (за исключением отображения комментариев вконтакте, они появляются только после перезагрузки страницы)
При последующем переходе по ссылке идет обновление страницы.
Подскажите где неправильно.
Если будет важно: сайт написан на Smarty. На каждой странице ничего не изменяется (загружается из файла) все кроме <div id="body"> (содержимое определяется файлом index.php перед выдачей результата по $_GET['act'].
Посмотреть результат можно здесь
Спасибо!

B@rmaley.e><e 07.12.2011 22:26

Вы назначаете обработчики события на ссылки только один раз. Соответственно, после того, как будет загружена другая страничка, на страницу будут добавлены новые ссылки, обработчик клика для которых Вы не установили.
Поэтому нужно либо заново устанавливать обработчик событий для ссылок, либо (что правильнее) использовать немного другой подход, предоставляемый методом $.live.

P.S.
Цитата:

Сообщение от ZeroxNeron
.attr('onclick','return false;')

Не надо так писать, просто возвращайте false в обработчике.

Pavel M. 08.12.2011 00:07

Цитата:

Сообщение от B@rmaley.e><e
предоставляемый методом $.live.

лучше вместо .live использовать другие методы .on или .delegate

.live устаревший метод, могут скоро исключить

ZeroxNeron 08.12.2011 10:31

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 141290)
Вы назначаете обработчики события на ссылки только один раз. Соответственно, после того, как будет загружена другая страничка, на страницу будут добавлены новые ссылки, обработчик клика для которых Вы не установили.
Поэтому нужно либо заново устанавливать обработчик событий для ссылок, либо (что правильнее) использовать немного другой подход, предоставляемый методом $.live.

P.S. Не надо так писать, просто возвращайте false в обработчике.

Честно говоря код взял из урока. А на счет методов вообще не в курсе. С JavaScript, а уж тем более с jQuery никогда не работал и поэтому все "методы" которые вы сейчас мне рассказывали мне чужды :D
Покажите, пожалуйста (с комментариями) как использовать эти команды в моем случае. Буду очень благодарен! Спасибо!

denisOgr 09.12.2011 03:58

.delegate(селектор, событие, функция) это событие привызывает функцию, всем селектором, с которыми произошло событие. Даже с новыми, что и нужно Вам.

Простой пример:
$("body").delegate("p", "click", function(){
      $(this).after("<p>Another paragraph!</p>");
    });

При клике на <p> будет появляться новый параграф. И эта функция будет работать даже с "новоиспеченными" параграфами.

Подробнее через поисковик.

ZeroxNeron 09.12.2011 09:41

<script type="text/javascript">
jQuery(function($){
	$("body").delegate("a", "click", function(){
		var href = $(this).attr('href');
		$('.wrapper').load(href+' .content', function(){
			history.pushState(null, null, href);
		});
	});
});

</script>

Сделал так. Всегда грузит страницу заново...
Ребят, ну подскажите как правильно сделать, плз. Сроки уже поджимают:С

ZeroxNeron 18.12.2011 12:18

UP

devote 18.12.2011 12:50

jQuery(function($){
    $("body").delegate("a", "click", function(){
        var href = $(this).attr('href');
        $('.wrapper').load(href+' .content', function(){
            history.pushState(null, null, href);
        });
        return false;
    });
});

ZeroxNeron 21.12.2011 09:56

Цитата:

Сообщение от devote (Сообщение 144103)
jQuery(function($){
    $("body").delegate("a", "click", function(){
        var href = $(this).attr('href');
        $('.wrapper').load(href+' .content', function(){
            history.pushState(null, null, href);
        });
        return false;
    });
});

Спасибо большое!
теперь грузится все, кроме картинки :с

ZeroxNeron 21.12.2011 10:32

а сейчас не показываются комментарии ВКонтакте -.-
а еще нужно, чтобы <head> обновлялся :с


Часовой пояс GMT +3, время: 21:15.