Javascript chessboard.js在检查工件放置时无法返回onDrop的snapback

Javascript chessboard.js在检查工件放置时无法返回onDrop的snapback,javascript,jquery,chessboard.js,Javascript,Jquery,Chessboard.js,我想做一个小游戏,目的是正确地把棋子放在棋盘上。 下面的代码能够在正确的时间将“错误”记录到控制台,但不会将“snapback”返回到onDrop,这是预期的行为 var setup1 = ChessBoard.fenToObj('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR'); var onDrop = function(source, target, piece, newPos, oldPos, orientation) { $.each( se

我想做一个小游戏,目的是正确地把棋子放在棋盘上。 下面的代码能够在正确的时间将“错误”记录到控制台,但不会将“snapback”返回到onDrop,这是预期的行为

var setup1 = ChessBoard.fenToObj('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR');
var onDrop = function(source, target, piece, newPos, oldPos, orientation) {

$.each( setup1, function( key, value ) {
if (target == key && piece !== value) {
console.log("wrong")
return 'snapback'
}

});

};

var cfg = {
  draggable: true,
  dropOffBoard: 'trash',
  sparePieces: true,
  showErrors: 'console',
  onDrop: onDrop,
};
var board = new ChessBoard('board', cfg);
你知道为什么这不起作用吗,或者有更好的解决方案吗

  • 编辑以包含脚本的整个JS部分
编辑:以下是基于Chris的答案,它可能很笨重,但很有效

var correct = 1
var setup1 = ChessBoard.fenToObj('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR');
var onDrop = function(source, target, piece, newPos, oldPos, orientation) {
correct = 1

if (target.match(/3|4|5|6/)) {
correct = 0
}

$.each( setup1, function( key, value ) {
if (target == key && piece !== value) {
correct = 0
}

})
if (correct == 0) return 'trash';
};

var cfg = {
  draggable: true,
  dropOffBoard: 'trash',
  sparePieces: true,
  showErrors: 'console',
  onDrop: onDrop,
};
var board = new ChessBoard('board', cfg);
您需要从onDrop函数返回“snapback”。在您发布的代码中,您从不同的函数(每个由$调用的函数)返回“snapback”


查看并了解如何使用。

onDrop函数允许您返回字符串“trash”以从电路板上删除该块,或返回“snapback”以将该块返回到最初拖动的正方形。 在代码中,您将从$返回'snapback',每个返回到onDrop函数的作用域。
警告:我还发现,如果将onDrop设置为异步函数,它将无法工作(例如,在升级典当时,您可能希望使用异步方法来显示模式,以选择要升级的部分)。

很抱歉,我已编辑了脚本的整个JS部分。如果我删除$each循环,我可以让它返回snapback。此外,如果我将一个工件放在错误的位置,控制台也会正确显示“错误”。我认为这与使用退出
$的“return”有关。每次
迭代都会将
'snapback'
传递给onDrop。谢谢,我通过更新新变量“correct”并将snapback(垃圾)放在一起,使其正常工作返回onDrop函数。我将编辑该问题,使其显示什么有效。