Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Срабатывание функции с определенным значением (https://javascript.ru/forum/misc/60664-srabatyvanie-funkcii-s-opredelennym-znacheniem.html)

diga 13.01.2016 18:11

Цитата:

Сообщение от laimas (Сообщение 403612)
Не так, если обрамлять тегом, должно быть так:

<span id="pgn"><span>1. <a>Ход 1 игрока</a> <a>Ход 2 игрока</a></span></span>

тогда

$('#pgn span').click(function() {
    var a = $(this).children();
    a.first().text() - ход первого игрока
    a.last().text() - ход второго игрока
})

хотел посмотреть как работает, сделал так:

$('#pgn span').on('click', function(){
	var a = $(this).children();
	a.first().text();
	a.last().text();
	console.log(a.first().text());
});


ничего консоль не показывает

обромление:
<span id="pgn"><span>1. <a href="#">e3</a> <a href="#">c6</a> </span><span>2. <a href="#">b4</a> <a href="#">a6</a></span></span>

laimas 13.01.2016 18:18

a.first().text();
a.last().text();

Это я написал как получить
а передавать:
board.move(a.first().text(), a.last().text());
если правильно помнится имя функции.

Без обрамления типа такого:

var plH = $('#pgn a').click(function() {
        var a = $(this), i = plH.index(a) & 1, f = i ? a.prev() : a, s = i ? a : a.next();
        board.move(f.text()+' '+s.text())
    })


Но как быть, если второй игрок не сделал хода, делать ход по истории или нет, в документации почитать или просто проверить поведение board.move() в этом случае.
Ну и к тому же нужно не только этот ход восстановить, но и те что сделаны за ним. Тоже в документации поискать, может это уже решаемо методами, иначе по индексу определять шаг истории и воспроизвести нотацию начиная с этого шага.

diga 13.01.2016 18:21

это понятно, но разве то что он получил, не должен был выводить в консоль?

laimas 13.01.2016 18:30

<html> 
<head> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script> 
$(function() {
$('#pgn span').on('click', function(){
    var a = $(this).children();
    alert(a.first().text() +' '+ a.last().text());
});
});
</script>     
</head> 
<body>
<span id="pgn"><span>1. <a href="#">e3</a> <a href="#">c6</a> </span><span>2. <a href="#">b4</a> <a href="#">a6</a></span></span>
</body> 
</html>


И не должно быть проблем, если ошибок не допущено.

diga 13.01.2016 19:12

Цитата:

Сообщение от laimas (Сообщение 403625)
[HTML run]<html>
И не должно быть проблем, если ошибок не допущено.

дело в том, что когда я запускаю ничего не происходит, возможно из-за динамического добавления этих ходов, если как вы показали, заранее "просто прописать" эти ходы, то все работает

рони 13.01.2016 19:31

diga,
мысли вслух

добавить заменить файл chess.js функция pgn
строки 1, 2, 3 добавить строку 4 изменить
var dt_move = [make_pretty(move).from + '-' + make_pretty(move).to];
          var temp = reversed_history.slice(-1);
          if(temp.length) dt_move.push(make_pretty(temp[0]).from + '-' + make_pretty(temp[0]).to);
		  move_string = '</a>'+pgn_move_number + '.'+'<a href="#" data-move="'+dt_move+'">';

файл common.js строки 7-11 добавить
//--- start ---
var board,
  game = new Chess(),
  statusEl = $('#status'),
  fenEl = $('#fen'),
  pgnEl = $('#pgn');
  pgnEl.on('click', 'a',function(event) {
  event.preventDefault();
  var data = $(this).data('move').split(',')
  board.move.apply(null,data);
})


сделать несколько ходов - нажать New game
нажимать последовательно ходы с 1 .

diga 13.01.2016 19:47

Цитата:

Сообщение от рони (Сообщение 403633)
diga,
добавить заменить файл chess.js


не мог бы ты залить chess.js? я заменил как ты сказал, но вышло не как у тебя :help:

рони 13.01.2016 19:50

diga,
изменения только тут
/* build the list of moves.  a move_string looks like: "3. e3 e6" */
      while (reversed_history.length > 0) {
        var move = reversed_history.pop();
        /* if the position started with black to move, start PGN with 1. ... */
        if (pgn_move_number === 1 && move.color === 'b') {
          move_string = '1. ...';
          pgn_move_number++;
        } else if (move.color === 'w') {
          /* store the previous generated move_string if we have one */
          if (move_string.length) {
            moves.push(move_string);
          }
          //move_string = pgn_move_number + '.';
		  //move_string = '</li><li>' + pgn_move_number + ')';
          var dt_move = [make_pretty(move).from + '-' + make_pretty(move).to];
          var temp = reversed_history.slice(-1);
          if(temp.length) dt_move.push(make_pretty(temp[0]).from + '-' + make_pretty(temp[0]).to);
		  move_string = '</a>'+pgn_move_number + '.'+'<a href="#" data-move="'+dt_move+'">';
          pgn_move_number++;
        }
        move_string = move_string + ' ' + move_to_san(move);
        make_move(move);
      }

      /* are there any other leftover moves? */

diga 13.01.2016 19:57


ты гений :dance: , почти то, что надо, за исключением того, что желательно отображения хода в любой момент нажатия, не именно с начальной позиции и с учетом всех предыдущих ходов сделанных до хода на которую нажали. Т.е. если нажму на ход который находится где то в середине всех ходов, отображались все хода сделанные до данного, но не отображались которые сделаны после ) :write:

diga 13.01.2016 20:00

Цитата:

Сообщение от рони (Сообщение 403642)
diga,
изменения только тут

ты однако интересно сделал, я бы не додумался, я уж думал можно нибудь типо такого:

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


Часовой пояс GMT +3, время: 23:38.