0

この関数の変数は、edit()関数を呼び出すたびに上書きされているようです。

function edit(el)
{
    $edit_img = $(el);
    $btn = $('<img width="15" height="15" src="images/add.png">');

    $edit_confirm = $edit_img.parent();

    $edit_confirm.append($btn);

    function restore_span()
    {
        $edit_img.show();

        $btn.remove();
    }

    $btn.click(restore_span);

    $edit_img.hide();
}

編集関数は、このonclickハンドラーから呼び出されます。

<img src = "images/edit-icon.png" width = "15px" height = "15px" onclick="edit(this)" />

上記のような複数の画像でedit()を呼び出すと、最近作成された画像のみが削除されます。

この動作を修正するには、この関数をどのように変更する必要がありますか?

4

2 に答える 2

4

var $btnの代わりに$btn(および他の変数にも)使用する

書くとき -var $btnなしのときにローカル変数を作成しますvar-それはグローバルです

したがって、あなたの場合、これらの変数を毎回置き換えます(たとえば$edit_img、復元機能で使用されます)

于 2012-12-04T20:14:09.950 に答える
2

PHPとは異なり、JavaScriptの変数は、ブロックまたは関数に対して暗黙的にローカルではありません。

変数を関数スコープに対してローカルとして宣言するには、次のvarステートメントを使用します。

function edit(el) {
    var $edit_img = $(el), // use them with comma
        $btn = $('<img width="15" height="15" src="images/add.png">');
    var $edit_confirm = $edit_img.parent(); // or just multiple times
    $edit_confirm.append($btn);
    $btn.click(function restore_span() {
        $edit_img.show();
        $btn.remove();
    });
    $edit_img.hide();
}
于 2012-12-04T20:15:57.350 に答える