4

重複の可能性:
イベントハンドラー関数に引数を渡し、それでも「this」参照を使用するにはどうすればよいですか?

私は少し検索をしましたが、これに対する解決策を見つけるのに苦労しているので、誰かがこれを複製と見なす場合は、入力した内容を述べていただければ幸いです...私の検索機能は休みを取っているようです!:Sとにかく:

function CreateMe(){

    //....

    var mycell = row.insertCell(-1);
    var myelement3 = document.createmyelement("input");
    myelement3.type = "button";
    myelement3.value = "Delete";
    myelement3.onclick = DeleteMe;
    myelement3.name = "Delete[]";
    mycell.appendChild(myelement3);

    //....

}

function DeleteMe(){
    alert(this);
}

ボタンを動的に作成するCreateMeを呼び出すボタンのあるフォームがあります。私が求めているのは、この動的ボタンがクリックされたときにDeleteMe関数に引数を渡すことができるようにすることです。特にこれ:

onclick="DeleteMe(this.parentNode.parentNode.rowIndex)"

差出人:http ://www.java2s.com/Code/JavaScript/HTML/Deletingtablerows.htm

ここでの進め方に少し戸惑っていますので、誰か手を貸していただければ幸いです。

編集:明確にするために、質問されているのは、動的に生成されたボタンのonclickイベントからDeleteMe関数に引数を渡す方法です。明らかに、これは関数をすぐに評価するだけなので、これを行うことはできません。

    myelement3.value = "Delete";
    myelement3.onclick=DeleteMe(this.parentNode.parentNode.rowIndex);
    myelement3.name = "Delete[]";
4

2 に答える 2

7

もうすぐです。.onclickは関数であることが期待されているので、あなたがしなければならないのは、その関数呼び出しを別の関数にラップすることだけです。

myelement3.onclick = function() { 
    DeleteMe(this.parentNode.parentNode.rowIndex);
    // or
    // DeleteMe.call(this, this.parentNode.parentNode.rowIndex);
    // to set `this` inside `DeleteMe` to the DOM element as well.
};

ブラウザがをサポートしている場合は、次の.bindこともできます。

myelement3.onclick = DeleteMe.bind(
    myelement3, 
    myelement3.parentNode.parentNode.rowIndex
);

myelement3.parentNode.parentNode.rowIndexただし、要素がクリックされたときではなく、作成時に評価されます。要素の位置が変わると、問題が発生する可能性があります。この場合は、最初の解決策を使用することをお勧めします。


別の方法として、クリックされた要素を参照するため、次の内部thisの行インデックスにアクセスできます。DeleteMe

function DeleteMe(){
    var index = this.parentNode.parentNode.rowIndex;
}

// ...

myelement3.onclick = DeleteMe;

DeleteMeこれは、手動ではなくイベントハンドラーとしてのみ呼び出す限り機能します。

于 2012-12-26T00:17:33.033 に答える
0

あなたはこれを試すことができます

function DeleteMe(e){
    e = e || window.event;
    var el = e.target || e.srcElement;
    // here el is your button that's been clicked
    alert(el.parentNode.parentNode.rowIndex);
}​
于 2012-12-25T23:51:39.513 に答える