2017-04-05 13 views
1

jqueryの中でのonclickにパラメータを渡す方法次のコードは、index.htmlをで呼び出している

<script src="js/jquery/jquery-1.8.2.min.js"></script> 
    <script src="js/px.js" type="text/javascript" ></script> 
    <script type="text/javascript"> 
     var newGame = new px1("black"); 
     new px1Generator(newGame); 
    </script> 

以下のコードは、px.jsである

私は100または900を送りたい
var px1 = function (color) { 
    if (color == "white") { 
     this.x = "100"; 
    } else if (color == "black") { 
     this.x = "900"; 
    }}; 
var px1Generator= function (px1obj) { 
    for (i = 0; i < 10; i++) { 
     $("#mainGame").append("<div class='pawn white'></div>"); 
    } 
    //for 10 object upon add onClickEvent 
    $(".pawn.white").on("click", function (event, px1obj) { 
     alert(px1obj.x) 
    }); 
}; 

onclick関数、それを行う方法? ユーザーがdivをクリックしたときのエラーの合意

+0

あなたは 'this.x'を試してみましたか? – Rajesh

+0

は、はい、私はそれをしようとしたが事実ではない、this.xは、例えば、$(この).hasClass(「質屋」)のために、DIVオブジェクトへのポイントです。 "真" – user3600935

答えて

1

上書きするコールバック関数の署名からpx1objパラメータを削除する必要があります。

px1objはすでにpx1Generator関数のスコープ内に存在し、そしてあなたはonclickのコールバックのスコープ内でそれをオーバーライドしています。

$(function() { 
 
    function px1(color) { 
 
    if (color == "white") { 
 
      this.x = "100"; 
 
    } else if (color == "black") { 
 
      this.x = "900"; 
 
    }}; 
 
    function px1Generator(px1obj) { 
 
     for (i = 0; i < 10; i++) { 
 
      $("#mainGame").append("<div class='pawn white'>a</div>"); 
 
     } 
 
     //for 10 object upon add onClickEvent 
 
     $(".pawn.white").on("click", function (event) { 
 
     console.log(px1obj.x) 
 
     }); 
 
    }; 
 

 
    var a = new px1("black"); 
 

 
    px1Generator(a); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div id="mainGame"></div>

+0

'するvar PX1 =関数PX1(色){戻りますか' ..? –

+0

@RoryMcCrossan私は、彼のコードを貼り付けて固定コピーcuzを、感謝 – naortor

+0

別の方法は、.on(イベント、セレクタ、データ、ハンドラー(eventObject)が)のデータを使用することで、Isintそれは!? – user3600935

2

あなたはここに二つの問題があります。まず、あなたが今、あなたのコードを実行するときは、このエラーが表示されます:あなたはそれが存在する前に、機能をインスタンス化しようとしているので、

Uncaught TypeError: px1 is not a constructor

です。最初に関数を定義するか、明示的な関数定義を使用するように変更する必要があります。

第2に、決して定義されないclickイベントハンドラのパラメータとしてpx1objをパラメータとして再定義したため、問題自体です。これにより、outserスコープで定義されたpx1objが非表示になります。この問題を解決するには、単にイベントハンドラからそのパラメータを削除:

var newGame = new px1("black"); 
 
new px1Generator(newGame); 
 

 
function px1(color) { 
 
    if (color == "white") { 
 
    this.x = "100"; 
 
    } else if (color == "black") { 
 
    this.x = "900"; 
 
    } 
 
}; 
 

 
function px1Generator(px1obj) { 
 
    for (i = 0; i < 10; i++) { 
 
    $("#mainGame").append("<div class='pawn white'></div>"); 
 
    } 
 
    //for 10 object upon add onClickEvent 
 
    $(".pawn.white").on("click", function(e) { 
 
    console.log(px1obj.x) 
 
    }); 
 
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<div class="pawn white">pawn white</div>

+0

私はこの部分を理解していません_これはnewを使って名前付き関数をインスタンス化することができないためです。明示的な関数定義を使用する必要があります。あなたは説明できますか? –

+0

申し訳ありません - 私のところは悪い言葉でした。私はそれを更新しました。 –

+0

ええ、今それは明らかです!以前のバージョンでは、あなたが言ったかのようでした:_var SomeClass = function()...不可能です_これは間違っています! –

関連する問題