Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 01.08.2010, 00:29
Интересующийся
Отправить личное сообщение для Saymor Посмотреть профиль Найти все сообщения от Saymor
 
Регистрация: 31.07.2010
Сообщений: 13

Сообщение от Gvozd
а в unbind надо передавать ту же функцию, а не такую же
хм.. интересный пример, возьму на заметку.
но из примера я не понял как это использовать в моем случае.

приведу пример своего кода:
j("#on").bind('click', on);
j('#off').unbind('click', off);
		<?php /* кликаем на .boxOn > вываливается панель #panel */?>
		function on(onObj){	
			j("#off").unbind('click');		
			j(".panel").attr('id','panelON').slideDown("slow");
			<?php /* присваиваем уникальный id каждому элементу vozrast */ ?>
	        j(".panel div").attr('id',function(index){return 'on_'+index;}).addClass("vozrast_On").removeClass("vozrast_Off");
			<?php /* выводим кнопки, ловим клик и обрабатываем AJAX */?>
	        j("#on_0").one("click", function(){ajaxURL(".boxLeft", "&query=on", "&age=0", "<?=$id;?>");});
			j("#on_1").one("click", function(){ajaxURL(".boxLeft", "&query=on", "&age=1", "<?=$id;?>");});
			j("#on_2").one("click", function(){ajaxURL(".boxLeft", "&query=on", "&age=2", "<?=$id;?>");});
			j("#on_3").one("click", function(){ajaxURL(".boxLeft", "&query=on", "&age=3", "<?=$id;?>");});
			j("#on_4").one("click", function(){ajaxURL(".boxLeft", "&query=on", "&age=4", "<?=$id;?>");});
			j("#on_5").one("click", function(){ajaxURL(".boxLeft", "&query=on", "&age=5", "<?=$id;?>");});
			footer(".vozrast_On");
			//onObj.stopPropagation();
		}


но так не правильно, так как все равно идет 2 запроса
а если поставить:
j("#on").bind('click', on);
j('#on').unbind('click', on);

то список с возрастом не вываливается.
логики уловить не могу..

Последний раз редактировалось Saymor, 01.08.2010 в 00:33.
Ответить с цитированием
  #12 (permalink)  
Старый 01.08.2010, 01:10
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от Saymor
но так не правильно, так как все равно идет 2 запроса
а если поставить:
j("#on").bind('click', on);j('#on').unbind('click', on);
то список с возрастом не вываливается.
логики уловить не могу..
я ж вроде написал, что ты выставляешь события много раз на #on_0 / #off_0 , и прочие
соответственно и снимать события надо с них же.перед тем, как выставить новые.
вот примерный код - не проверял на рабочесть, но суть такова:
<script type="text/javascript">
   var j = jQuery;
   function footer(OnOff){
      j(OnOff).click(function(){
         j(".panel").slideUp("slow");
         j(".boxOn").css({'display':'none'});
         j(".boxOff").css({'display':'none'});
         j(".center").css({'display':'block'});
         return false;
      });
   }
   function ajaxURL(box, rat, age, objid){
      j(box).html('<div class="load"></div>');
      j.ajax({
         type:"POST",
         url:"ajax.index.php",
         data:"option=com_kino&task=vote"+rat+age+"&id=<?=$id;?>",
         cache:false,
         success:function(html){j(box).html(html);}
      });
   }
   j(document).ready(function(){
   var fns=[null,null,null,null,null,null];//массив запомненных обработчиков события
      j(".center").css({'display':'none'});
      <?php /* кликаем на .boxOn > вываливается панель #panel */?>
      j("#on").bind("click", function(){
         
         j(".panel").attr('id','panelON').slideDown("slow");
         <?php /* присваиваем уникальный id каждому элементу vozrast */ ?>
           j(".panel div").attr('id',function(index){return 'on_'+index;}).addClass("vozrast_On").removeClass("vozrast_Off");
         <?php /* выводим кнопки, ловим клик и обрабатываем AJAX */?>
           j("#on_0").unbind('click',fns[0]).one("click", fns[0]=function(){ajaxURL(".boxLeft", "&query=on", "&age=0", "<?=$id;?>");});
         j("#on_1").unbind('click',fns[1]).one("click", fns[1]=function(){ajaxURL(".boxLeft", "&query=on", "&age=1", "<?=$id;?>");});
         j("#on_2").unbind('click',fns[2]).one("click", fns[2]=function(){ajaxURL(".boxLeft", "&query=on", "&age=2", "<?=$id;?>");});
         j("#on_3").unbind('click',fns[3]).one("click", fns[3]=function(){ajaxURL(".boxLeft", "&query=on", "&age=3", "<?=$id;?>");});
         j("#on_4").unbind('click',fns[3]).one("click", fns[4]=function(){ajaxURL(".boxLeft", "&query=on", "&age=4", "<?=$id;?>");});
         j("#on_5").unbind('click',fns[4]).one("click", fns[5]=function(){ajaxURL(".boxLeft", "&query=on", "&age=5", "<?=$id;?>");});
         footer(".vozrast_On");
      });
        <?php /* отрицательный отзыв */?>
        j("#off").bind("click", function(){         
         
         j(".panel").attr('id','panelOFF').slideDown("slow");
         <?php /* присваиваем уникальный id каждому элементу vozrast */?>
           j(".panel div").attr('id',function(index){return 'off_'+index;}).addClass("vozrast_Off").removeClass("vozrast_On");
         <?php /* выводим кнопки, ловим клик и обрабатываем AJAX */?>
           j("#off_0").unbind('click',fns[0]).one("click", fns[0]=function(){ajaxURL(".boxRight", "&query=off", "&age=0", "<?=$id;?>");});
         j("#off_1").unbind('click',fns[1]).one("click", fns[1]=function(){ajaxURL(".boxRight", "&query=off", "&age=1", "<?=$id;?>");});
         j("#off_2").unbind('click',fns[2]).one("click", fns[2]=function(){ajaxURL(".boxRight", "&query=off", "&age=2", "<?=$id;?>");});
         j("#off_3").unbind('click',fns[3]).one("click", fns[3]=function(){ajaxURL(".boxRight", "&query=off", "&age=3", "<?=$id;?>");});
         j("#off_4").unbind('click',fns[4]).one("click", fns[4]=function(){ajaxURL(".boxRight", "&query=off", "&age=4", "<?=$id;?>");});
         j("#off_5").unbind('click',fns[5]).one("click", fns[5]=function(){ajaxURL(".boxRight", "&query=off", "&age=5", "<?=$id;?>");});
         footer(".vozrast_Off");
      });
   });
   </script>

<div style='text-align:center;margin-top:5px;'>
       <div class='boxLeft'><?=$sumON; /*число из базы*/ ?></div>
                          <div class='boxOn' id='on'></div><div class='boxOff' id='off'></div><div class='center'></div>
       <div class='boxRight'><?=$sumOFF; /*число из базы*/ ?></div>
</div><div style='clear:both;'></div>

<div class='panel'>Выберите Ваш возраст:
       <div>моложе 20</div>
       <div>21-30</div>
       <div>31-40</div>
       <div>41-50</div>
       <div>51-60</div>
       <div>61 старше</div>
</div>

PS кстати, менять ID-шники - не самая лучшая идея
Ответить с цитированием
  #13 (permalink)  
Старый 01.08.2010, 08:22
Интересующийся
Отправить личное сообщение для Saymor Посмотреть профиль Найти все сообщения от Saymor
 
Регистрация: 31.07.2010
Сообщений: 13

спасибо и низкий поклон, Ваш пример работает..

но если честно, сам бы до такого не дошел.
В мануалах иначе описано.

а почему менять ID-шники - не самая лучшая идея?
Ответить с цитированием
  #14 (permalink)  
Старый 01.08.2010, 10:47
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от Saymor
а почему менять ID-шники - не самая лучшая идея?
я даже добавлю, что не лучшая идея, здесь вообще задействовать ID_шники
работать ваш код будет, даже с добавлением и изменением ID-Шников
но при этом страдает чистота кода.
ID - это уникальный идентификатор, как ФИО у человека
поэтому его не стоит менять
и к тому же ID предназначен для доступа к одиночным элементам, для которых удобней обратится именно так.
в вашем случае мы имеем дело с набором соседей
и к каждому из них можно обращаться как "сосед №", а не назначать ID
как именно обращатся таким образом, опять-таки напсиано в справочнике
Ответить с цитированием
  #15 (permalink)  
Старый 02.08.2010, 21:30
Интересующийся
Отправить личное сообщение для Saymor Посмотреть профиль Найти все сообщения от Saymor
 
Регистрация: 31.07.2010
Сообщений: 13

Сообщение от Gvozd Посмотреть сообщение
я даже добавлю, что не лучшая идея, здесь вообще задействовать ID_шники
работать ваш код будет, даже с добавлением и изменением ID-Шников
но при этом страдает чистота кода.
ID - это уникальный идентификатор, как ФИО у человека
поэтому его не стоит менять
и к тому же ID предназначен для доступа к одиночным элементам, для которых удобней обратится именно так.
в вашем случае мы имеем дело с набором соседей
и к каждому из них можно обращаться как "сосед №", а не назначать ID
как именно обращатся таким образом, опять-таки напсиано в справочнике
оо как.. понятно..

вопрос еще такой, я добавил строчку кода сюда
БЫЛО:
function footer(OnOff){
04	      j(OnOff).click(function(){
05	         j(".panel").slideUp("slow");
06	         j(".boxOn").css({'display':'none'});
07	         j(".boxOff").css({'display':'none'});
08	         j(".center").css({'display':'block'});
09	         return false;
10	      });
11	   }


СТАЛО:
function footer(OnOff){
		j(OnOff).click(function(){
			j(".panel").slideUp("slow");
			j(".boxOn").css({'display':'none'});
			j(".boxOff").css({'display':'none'});
			j(".center").css({'display':'block'});
			j(".voteAge").slideDown("slow");
			ajaxURL("#voteAge","","&age=agevote","<?=$id;?>");
		});	
	}


все работает как мне надо! возникает проблема с отображением результатов после запроса AJAX'a.
то есть браузер отображает значение ~3-4 раза нормально, 1-2 раза значение не обновляется, хотя запрос проходит..
проверял, браузер в данном случае не кэширует..

как такое может быть?
Ответить с цитированием
  #16 (permalink)  
Старый 03.08.2010, 01:01
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

отлаживайте
фаербаг вам в руки
http://javascript.ru/tutorial/foundation/errors
Ответить с цитированием
  #17 (permalink)  
Старый 03.08.2010, 13:21
Интересующийся
Отправить личное сообщение для Saymor Посмотреть профиль Найти все сообщения от Saymor
 
Регистрация: 31.07.2010
Сообщений: 13

Сообщение от Gvozd Посмотреть сообщение
отлаживайте
фаербаг вам в руки
http://javascript.ru/tutorial/foundation/errors
я им пользуюсь, без него никак! но он ошибок не выдает
Ответить с цитированием
  #18 (permalink)  
Старый 03.08.2010, 14:01
Аватар для sysya
Профессор
Отправить личное сообщение для sysya Посмотреть профиль Найти все сообщения от sysya
 
Регистрация: 27.12.2009
Сообщений: 292

Saymor,
на странице куда запрос идёт установите заголовки запрещающие кешировать, если нету таких.
__________________
Нет предела совершенству...
Ответить с цитированием
  #19 (permalink)  
Старый 03.08.2010, 14:03
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

он предназначен не только для выявления явных ошибок синтаксиса, а еще и для отладки ошибок логики
в нем есть возможность пошагово выполнять JS, смотреть перменные и прочее.
Ответить с цитированием
  #20 (permalink)  
Старый 03.08.2010, 18:56
Интересующийся
Отправить личное сообщение для Saymor Посмотреть профиль Найти все сообщения от Saymor
 
Регистрация: 31.07.2010
Сообщений: 13

Сообщение от Gvozd Посмотреть сообщение
он предназначен не только для выявления явных ошибок синтаксиса, а еще и для отладки ошибок логики
в нем есть возможность пошагово выполнять JS, смотреть перменные и прочее.
я бы рад, но в моей версии нет ничего подобного или я "инвалид"
у меня версия 1.5.4 скрин:
http://imglink.ru/show-image.php?id=...704e97c10cb23f

и еще поэксперементировав получил следующее:
если после AJAX запроса я выдачу результатов отдаю в какой нибудь <div> на странице. То есть не в тот где отображается инфа и где она должна обновиться после запроса, а в "левый", то FF из 10 запросов 10 обновляет как надо! а вот например опера показывает из 2-4 запросов 1 не обновленный!

загадка прям какая-то..
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возвращение значения $.ajax() roma86 jQuery 2 19.03.2010 20:56
Вопрос о циклических ссылках (JavaScript -> Dom -> JavaScipt) BlueIce Events/DOM/Window 10 17.02.2010 21:58
Вопрос про ООП, цепочки прототипов. Shaci Общие вопросы Javascript 5 27.01.2010 14:50
мааленький вопрос по Regexp:) mirniy Общие вопросы Javascript 1 22.01.2009 20:47
вопрос по long poll megaswin AJAX и COMET 2 27.05.2008 09:20