0

jqPuzzleの設定では、人がパズルを完成したときに呼び出される成功関数を渡すことができます。問題は、ページにいくつかのパズルがあり、現在完了しているパズルでアクションを実行したいのですが、結果には数秒と数の移動しかありません。現在完成しているパズルを入手するにはどうすればよいですか?

これが私が話していることのデモです:http://polishwords.com.pl/dev/puzzle/exa.php

重要な部分は次のとおりです。

function initializePuzzle()
{
    var settings = {
      cols: 3,
      rows: 3,
      success: { 
          callback: function(results) {  
              //results.moves and results.seconds, but how to get the puzzle that was completed?
              alert(results.moves);
              var puzzleThatWasCompleted = ???;
          } 
      } 
    };

    $('.puzzle').jqPuzzle(settings);  //Changing all images of class puzzle to puzzles
}
4

2 に答える 2

2

成功関数を任意の1つのインスタンスのパズルに渡すことができる場合は、関数の異なる「バージョン」をパズルの各インスタンスに渡し、バージョンごとに、関連する特定のインスタンスを示す識別子を含めることができます。 。それはばかげたアプローチです。

スマートなアプローチは、別の関数内で成功コールバックを定義し、それによって「クロージャ」を形成することです。これにより、成功コールバックはいずれの場合も同一になりますが、インスタンスを識別する外部変数にアクセスできます。

あなたのコードはすでにこのアプローチに熟しており、変更する必要はほとんどありません。

次のコードの変更では、文字列または数値がに渡されinitializePuzzle()ます。仮変数puzzleIDはクロージャにトラップされ、起動時に成功コールバックに引き続き使用できます。

また、各パズルのコンテナをより正確に指定する必要があります。クラスセレクターは複数の要素をアドレス指定する可能性がありますが、さらに悪いことに、呼び出される.puzzleたびに同じになります。initializePuzzle()したがって、関数が呼び出されるたびに一意のIDを関数に渡す必要があります。

function initializePuzzle(puzzleID, containerSelector) {
    var settings = {
        cols: 3,
        rows: 3,
        success: {
            callback: function(results) {
                alert('PUZZLE ' + puzzleID + ': ' + results.moves);
            }
        }
    };
    $(containerSelector).jqPuzzle(settings); 
}

今、あなたがする必要があるのはinitializePuzzle()、このようなものを呼び出すことです:

initializePuzzle('A', '#puzzle1');
initializePuzzle('B', '#puzzle2');
initializePuzzle('C', '#puzzle3');

デモ

于 2012-10-20T22:22:31.080 に答える
0

私がそれほど間違っていなければ、コールバックで$(this)を使用して成功したパズルにアクセスできます。(私はあなたが提供した例を使用してコンソールでそれをテストしました、そしてそれはうまくいきました!)

$(this).attr('id');のようなものを使用して回復できるように、必ずそれぞれにIDを指定してください。

于 2012-10-20T21:56:32.103 に答える