Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: События, клык дублирует событие

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
nepster
Отправлено: 31 Октября, 2013 - 23:53:20
Post Id



Частый гость


Покинул форум
Сообщений всего: 195
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




Собственно пишу шашки на js, практикуюсь. Получился такой момент:


CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.         /**
  3.         *  Ход игрока
  4.         */
  5.         hit: function()
  6.         {
  7.             var obj = this;
  8.             var checkerCoord = null; // шашка, которой будем ходить (активная)
  9.      
  10.             $(function() {
  11.  
  12.                 /**
  13.                  * Пользователь наводит на шашки, необходимо убедиться, что
  14.                  * он наводит на свои и получает возможность хода
  15.                  */  
  16.                 $('[data-item="checker"]').hover(
  17.                     function() {
  18.                         if($(this).data('checker') == obj.player)
  19.                             $( this ).addClass('ck_hover');
  20.                     },
  21.                     function() {
  22.                         if($(this).data('checker') == obj.player)
  23.                             $( this ).removeClass('ck_hover');
  24.                     }
  25.                 );
  26.                
  27.                
  28.                 $('[data-item="checker"]').on("click", function() {
  29.                    
  30.                     console.log('Пешка');
  31.                    
  32.                     if($(this).data('checker') == obj.player)
  33.                     {
  34.                         // удалим все активные шашки, если они были
  35.                         $(this).parents('#board').children().find('div').removeClass('active')
  36.                         $(this).parents('#board').children().removeClass('cell_help');
  37.                        
  38.                         // при нажатии на шашку, делаем ее активной
  39.                         $(this).addClass('active');
  40.                        
  41.                         checkerCoord = $(this).data('coord');
  42.                     }
  43.                 });
  44.                
  45.                
  46.                 // клик по полю
  47.                 $('[data-item="cell"]').on("click", function() {
  48.                    
  49.                     console.log('Поле');
  50.                    
  51.                     if(checkerCoord != null)
  52.                     {
  53.                         // координаты ячейки
  54.                         var cellCoord = $(this).data('coord');
  55.                        
  56.                         //checkerCoord - координаты шашки
  57.                        
  58.                         // обновить поле
  59.                         obj.updateCell(checkerCoord,cellCoord);
  60.                     }
  61.                 });
  62.                
  63.             });
  64.         },
  65.  



Тут есть 2 события:

CODE (javascript):
скопировать код в буфер обмена
  1.             $('[data-item="checker"]').on("click", function() {
  2.                 $('[data-item="cell"]').on("click", function() {


1 клик по шашке, второе клик по полю.
Если поле пустое, то все хорошо, однако если поле с шашкой и я кликаю по шашке, то срабатывают оба события.

// генерация поля, примерна вот такая
CODE (javascript):
скопировать код в буфер обмена
  1.             // расставляем все черные шашки
  2.             ch_black.forEach(function(coord)
  3.             {
  4.                 $('[data-item="cell"][data-coord="'+coord+'"]').html('<div class="checker ck_black" data-item="checker" data-checker="black" data-coord="'+coord+'"></div>')
  5.             });


Подскажите пожалуйста как сделать так, что бы кликать по полю и по шашке можно было отдельно.
 
 Top
armancho7777777 Супермодератор
Отправлено: 01 Ноября, 2013 - 01:27:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $('[data-item="checker"]').on("click", function(e) {
  3.         e.stopPropagation();
  4. });
  5.  
 
 Top
nepster
Отправлено: 01 Ноября, 2013 - 02:12:26
Post Id



Частый гость


Покинул форум
Сообщений всего: 195
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




armancho7777777, подскажите пожалуйста, стоит ли так проверять или проверять просто по клику на поле, а там уже смотреть есть пешка или нет ?
 
 Top
armancho7777777 Супермодератор
Отправлено: 01 Ноября, 2013 - 02:18:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




stopPropagation предотвращает всплытие.
nepster пишет:
проверять просто по клику на поле, а там уже смотреть есть пешка или нет

Можно и так.
Смотреть, каким объектом является источник события e.target
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB