07.12.2011, 12:44
|
Интересующийся
|
|
Регистрация: 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.
|
|
07.12.2011, 22:26
|
|
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
Вы назначаете обработчики события на ссылки только один раз. Соответственно, после того, как будет загружена другая страничка, на страницу будут добавлены новые ссылки, обработчик клика для которых Вы не установили.
Поэтому нужно либо заново устанавливать обработчик событий для ссылок, либо (что правильнее) использовать немного другой подход, предоставляемый методом $.live.
P.S.
Сообщение от ZeroxNeron
|
.attr('onclick','return false;')
|
Не надо так писать, просто возвращайте false в обработчике.
|
|
08.12.2011, 00:07
|
Лаборант :-)
|
|
Регистрация: 08.11.2011
Сообщений: 806
|
|
Сообщение от B@rmaley.e><e
|
предоставляемый методом $.live.
|
лучше вместо .live использовать другие методы .on или .delegate
.live устаревший метод, могут скоро исключить
|
|
08.12.2011, 10:31
|
Интересующийся
|
|
Регистрация: 07.12.2011
Сообщений: 10
|
|
Сообщение от B@rmaley.e><e
|
Вы назначаете обработчики события на ссылки только один раз. Соответственно, после того, как будет загружена другая страничка, на страницу будут добавлены новые ссылки, обработчик клика для которых Вы не установили.
Поэтому нужно либо заново устанавливать обработчик событий для ссылок, либо (что правильнее) использовать немного другой подход, предоставляемый методом $.live.
P.S. Не надо так писать, просто возвращайте false в обработчике.
|
Честно говоря код взял из урока. А на счет методов вообще не в курсе. С JavaScript, а уж тем более с jQuery никогда не работал и поэтому все "методы" которые вы сейчас мне рассказывали мне чужды
Покажите, пожалуйста (с комментариями) как использовать эти команды в моем случае. Буду очень благодарен! Спасибо!
|
|
09.12.2011, 03:58
|
Аспирант
|
|
Регистрация: 26.07.2010
Сообщений: 31
|
|
.delegate(селектор, событие, функция) это событие привызывает функцию, всем селектором, с которыми произошло событие. Даже с новыми, что и нужно Вам.
Простой пример:
$("body").delegate("p", "click", function(){
$(this).after("<p>Another paragraph!</p>");
});
При клике на <p> будет появляться новый параграф. И эта функция будет работать даже с "новоиспеченными" параграфами.
Подробнее через поисковик.
|
|
09.12.2011, 09:41
|
Интересующийся
|
|
Регистрация: 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.
|
|
18.12.2011, 12:18
|
Интересующийся
|
|
Регистрация: 07.12.2011
Сообщений: 10
|
|
UP
|
|
18.12.2011, 12:50
|
что-то знаю
|
|
Регистрация: 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;
});
});
|
|
21.12.2011, 09:56
|
Интересующийся
|
|
Регистрация: 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;
});
});
|
Спасибо большое!
теперь грузится все, кроме картинки :с
|
|
21.12.2011, 10:32
|
Интересующийся
|
|
Регистрация: 07.12.2011
Сообщений: 10
|
|
а сейчас не показываются комментарии ВКонтакте -.-
а еще нужно, чтобы <head> обновлялся :с
Последний раз редактировалось ZeroxNeron, 21.12.2011 в 11:18.
|
|
|
|