Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.12.2011, 12:44
Интересующийся
Отправить личное сообщение для ZeroxNeron Посмотреть профиль Найти все сообщения от ZeroxNeron
 
Регистрация: 07.12.2011
Сообщений: 10

Необновляемый блок 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'].
Посмотреть результат можно здесь
Спасибо!

Последний раз редактировалось ZeroxNeron, 07.12.2011 в 12:47.
Ответить с цитированием
  #2 (permalink)  
Старый 07.12.2011, 22:26
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

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

P.S.
Сообщение от ZeroxNeron
.attr('onclick','return false;')
Не надо так писать, просто возвращайте false в обработчике.
Ответить с цитированием
  #3 (permalink)  
Старый 08.12.2011, 00:07
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

Сообщение от B@rmaley.e><e
предоставляемый методом $.live.
лучше вместо .live использовать другие методы .on или .delegate

.live устаревший метод, могут скоро исключить
Ответить с цитированием
  #4 (permalink)  
Старый 08.12.2011, 10:31
Интересующийся
Отправить личное сообщение для ZeroxNeron Посмотреть профиль Найти все сообщения от ZeroxNeron
 
Регистрация: 07.12.2011
Сообщений: 10

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

P.S. Не надо так писать, просто возвращайте false в обработчике.
Честно говоря код взял из урока. А на счет методов вообще не в курсе. С JavaScript, а уж тем более с jQuery никогда не работал и поэтому все "методы" которые вы сейчас мне рассказывали мне чужды
Покажите, пожалуйста (с комментариями) как использовать эти команды в моем случае. Буду очень благодарен! Спасибо!
Ответить с цитированием
  #5 (permalink)  
Старый 09.12.2011, 03:58
Аспирант
Отправить личное сообщение для denisOgr Посмотреть профиль Найти все сообщения от denisOgr
 
Регистрация: 26.07.2010
Сообщений: 31

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

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

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

Подробнее через поисковик.
Ответить с цитированием
  #6 (permalink)  
Старый 09.12.2011, 09:41
Интересующийся
Отправить личное сообщение для ZeroxNeron Посмотреть профиль Найти все сообщения от ZeroxNeron
 
Регистрация: 07.12.2011
Сообщений: 10

<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, 10.12.2011 в 11:37.
Ответить с цитированием
  #7 (permalink)  
Старый 18.12.2011, 12:18
Интересующийся
Отправить личное сообщение для ZeroxNeron Посмотреть профиль Найти все сообщения от ZeroxNeron
 
Регистрация: 07.12.2011
Сообщений: 10

UP
Ответить с цитированием
  #8 (permalink)  
Старый 18.12.2011, 12:50
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

jQuery(function($){
    $("body").delegate("a", "click", function(){
        var href = $(this).attr('href');
        $('.wrapper').load(href+' .content', function(){
            history.pushState(null, null, href);
        });
        return false;
    });
});
Ответить с цитированием
  #9 (permalink)  
Старый 21.12.2011, 09:56
Интересующийся
Отправить личное сообщение для ZeroxNeron Посмотреть профиль Найти все сообщения от ZeroxNeron
 
Регистрация: 07.12.2011
Сообщений: 10

Сообщение от devote Посмотреть сообщение
jQuery(function($){
    $("body").delegate("a", "click", function(){
        var href = $(this).attr('href');
        $('.wrapper').load(href+' .content', function(){
            history.pushState(null, null, href);
        });
        return false;
    });
});
Спасибо большое!
теперь грузится все, кроме картинки :с
Ответить с цитированием
  #10 (permalink)  
Старый 21.12.2011, 10:32
Интересующийся
Отправить личное сообщение для ZeroxNeron Посмотреть профиль Найти все сообщения от ZeroxNeron
 
Регистрация: 07.12.2011
Сообщений: 10

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

Последний раз редактировалось ZeroxNeron, 21.12.2011 в 11:18.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как мышкой перемещать Div блок? Simon Общие вопросы Javascript 26 18.03.2024 12:37
Как проверить пустой ли блок div? KamalovRadik jQuery 6 13.11.2018 18:26
При клике ссылки, открыть DIV блок, и при клике ещё раз, закрыть его Simon Общие вопросы Javascript 59 28.05.2017 17:31
При наведении на определенный блок, DIV, появляется скрытое сожержимое kismedia Элементы интерфейса 9 22.05.2015 19:15
Отрыть DIV блок при переходе с другой страницы BuTbka Общие вопросы Javascript 7 08.04.2009 22:59