イベント ハンドラーから関数を呼び出す場合、その関数はthis
ハンドラーによって設定されません (ただし、this
Xdazz の回答ごとにハンドラーから渡すことも、 this
Kyle の回答ごとに設定することもできます)。もう 1 つの方法は、イベントに関連付けられたイベント オブジェクトから送信者要素を抽出することです。
function move(e) {
if (!e)
e = window.event;
var sender = e.srcElement || e.target;
//maybe some nested element.. find the actual table cell parent.
while (sender && sender.nodeName.toLowerCase() != "td")
sender = sender.parentNode;
var myId = sender.id;
alert(myId);
}
また、イベントを明示的に渡す必要があります。
onclick="move(event)"
表のセルにネストされた要素がある場合、それらは「送信者」になるため、目的の要素 (表のセル) を取得するには、上に移動する必要があることに注意してください。この頭痛の種をすべて回避するには、以下のコードを介してハンドラをアタッチする方法を参照してください。
ライブ テスト ケース。
とはいえ、インラインではなくコードを介してクリック イベントをバインドすることをお勧めします。HTML と JavaScript を混在させないでください。これを実現するには、次のようなコードを用意します。
window.onload = function() {
var arrCells = document.getElementsByTagName("td");
for (var i = 0; i < arrCells.length; i++) {
var oCell = arrCells[i];
if (oCell.id && oCell.id.substr(0, 1) == "A") {
oCell.onclick = move;
}
}
}
上記のコードを配置すると、HTML からインラインonclick=
呼び出しを削除し、元の関数 (this
はクリックされたテーブル セルを指す) を保持できます。
フィドルを更新しました。