TransWikia.com

Шашка перемещается не туда Jquery

Stack Overflow на русском Asked by Vova Shkurletov on November 5, 2021

Пишу шашки и тут такая проблема:
Если ходишь второй шашкой, то происходит какая-то каша.

Код:

$(document).ready(function() {
  $('<table></table>').appendTo('body');
  var is = false;
  for(let i = 0; i < 8; i += 1) {
    $('<tr>').appendTo('table');
    console.log('create-tR');
    is = !is;
    for(let j = 0; j < 8; j += 1) {
      is = !is;
      $('<td>').appendTo('tr:last');
      $('<div class="cage" id='+i+j+'></div>').appendTo('td:last');
      if(is) {
        $('#'+i+j).css('background-color', '#362416');
      } else {
        $('#'+i+j).css('background-color', '#edd3a2');
      }
      if(is && (i <= 2 || i >= 5)) { //if hahka
        if(i <= 2) {
          $('<div id=h'+i+j+' class="hahka bl"></div>').appendTo('#'+i+j);
        } else {
          $('<div id=h'+i+j+' class="hahka wh"></div>').appendTo('#'+i+j);
        }
      }
      $('</td>').appendTo('tr:last');
      $('</tr>').appendTo('table');
    }
  }
  //--↑ place in top is a placing chessboard ↑--//
  var plhod = true,
    i = 0;
  //console.log('create-td');
  if(plhod) { //if player walk now
    $('.hahka.wh').click(function() {
      var pos = parseInt($(this).attr('id').slice(1));
      var off = $(this);
      //off-elem of hahka
      alert(pos);
      $('#'+String(pos - 8 - 1)).css('background-color', 'yellow');
      $('#'+String(pos - 8 - 3)).css('background-color', 'yellow');
      $('.cage').click(function() {
        if($(this).css('background-color') == 'rgb(255, 255, 0)') {
          console.log($(this).offset());
          
          alert($(this).attr('id'));
          $("#"+off.attr('id')).offset($(this).offset());

          $('#'+String(pos - 8 - 1)).css('background-color', '#362416');
          $('#'+String(pos - 8 - 3)).css('background-color', '#362416');
          $(off).attr('id', 'h'+$(this).attr('id')+i);
        }
      });
    });
  }
});
div {
  width: 70px;
  height: 70px;
}

.hahka {
  width: 50px;
  height: 50px;
  border-radius: 50%;
}

div td tr {
  margin: 0;
  padding: 0;
}

.bl {
  background-color: red;
}

.wh {
  background-color: white;
}

table {
  background-color: black;
}

/* fix snippet */
.as-console-wrapper,
.as-console-wrapper div {
  width: auto;
  height: auto;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Сначала норм

сначала норм

И тут норм

и тут норм

Когда переставляешь 2 шашку, то на ее место идёт предыдущая шашка. Что делать?

введите сюда описание изображения

Спасибо!

One Answer

Не назначайте обработчики событий внутри других обработчиков событий.

$('.hahka.wh').click(function() {
  ...
  $('.cage').click(function() {

Делая так, Вы (при клике на $('.hahka.wh')) навешиваете все новые и новые обработчики на $('.cage').click, которые все выстреливают при клике на $('.cage').

Answered by Igor on November 5, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP