Jqueryをクリックバインディングに組み合わせが正しく結合複数のコピー

StackOverflow https://stackoverflow.com/questions/2831870

  •  26-09-2019
  •  | 
  •  

質問

い問題作成時のコピーをテンプレートと結びつけます。click()メソッドをするのです。以下のjavascript例えば:

function TestMethod() {
    var test = Array();
    test[0] = 0;
    test[1] = 1;
    test[2] = 2;

    // Insert link into the page
    $("#test_div").html("<a href=\"#\"></a><br>");
    var list;
    for (x = 0; x < test.length; x++) {
        var temp = $("#test_div").clone();
        temp.find('a').html("Item #" + test[x]);
        temp.click(function () { alert(x); });

        if (list == undefined)
            list = temp;
        else
            list = list.append(temp.contents());
    }
    $("#test_div2").append(list);
 }

この問題を私は見たことな商品ユーザクリックで常時運行alert(2),ものをクリックすると、次のように最初の数です。

どのように取得します。

編集: 私は非常に簡単な例を示すべき問題はより鮮明に見せなければならない.どの項目をクリックすので、常に示すアラートボックスの番号2です。

役に立ちましたか?

解決

正しいについて知っておきましょう .valueOf() JSを返しますプリミティブ値のBooleanオブジェクト.....

このようなことは起こらなくな ShowObject(5,'T');... ShowObject(objectVal.valueOf(), 'T');

なぜ使用しないで objects[x].Value す。 ShowObject(objects[x].Value, 'T');

WOOOOOSSSHHHH!

で深く...I見解---

で休んで本当にそのように...
この溶液に、

temp.find('a').bind('click', {testVal: x},function (e) { 
   alert(e.data.testVal);
   return false;
});

ベスト説明 本書をお読みください...途中のページのこと パイベントデータ
クモの上記コード

他のヒント

行きたいという問題から生じる誤解の範囲で可能です。(私の謝罪について知っておきましょ間違っています。)

function () {
    for (...) {
        var foo = ...;

        $('<div>').click(function () { alert(foo); }).appendTo(...);
    }
}

JavaScriptでは、 の機能を持つ新しい範囲 (通称として 閉鎖).

なので、毎回の for ループを知り、同じ foo, 以降、その範囲は function, なので、 for.にもイノベーションをここまでのイベントが定義されています。末までにループを、毎 click 知と同じ foo やノウハウで最後の値で割り当てられます。

このいずれかを内部に閉鎖とすぐに実行されるごとに、匿名の機能:

function () {
    for (...) {
        (function (foo) {
            $('<div>').click(function () { alert(foo); }).appendTo(...);
        })(...);
    }
}

または、コールバックに基づく機能など jQuery.each:

function () {
    $.each(..., function (i, foo) {
        $('<div>').click(function () { alert(foo); }).appendTo(...);
    });
}

お問題になったと思い、後者注の変化 objects[x] わずか object):

var list;
jQuery.each(data.objects, function (x, object) {

    // Clone the object list item template
    var item = $("#object_item_list_template").clone();

    // Setup the click action and inner text for the link tag in the template
    var objectVal = object.Value;
    item.find('a').click(function () { ShowObject(objectVal.valueOf(), 'T'); }).html(object.Text);

    // add the html to the list
    if (list == undefined)
        list = item;
    else
        list.append(item.contents());
});
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top