2010-12-19 7 views
4

次の質問は、ほとんどの人にとっては簡単な質問かもしれません。しかし、私はJavaScriptを始めたばかりです。誰かが私を正しい方向に向けることができたら本当に感謝しています。テーブル行のIDを渡す

私は、各行が独自のIDを持つ通常のHTMLテーブルを持っています。私が達成したいのは、行のリンクをクリックするたびに、その行のidを変数に格納し、後で関数に渡す必要があるということです。行#1をクリックしてID#1を渡すなどとしましょう...これをどのように達成できますか?

ありがとうございます。これは動作するはず

+0

はあなたがJavaScriptライブラリを([MooToolsは](http://mootools.net/)、[プロトタイプ](使用していますhttp://www.prototypejs.org/)、[jQuery](http://www.jquery.com)、[Glow](http://www.bbc.co.uk/glow/)、[Scriptaculous] (http://script.aculo.us/)...)、または 'plain'-vanilla JavaScript? –

+0

2つの小さな発言:1)IDは数字で始めることはできません。 idとして "1"ではなく "row1"のようなものを使用してください。 B)多くの場合(ほとんどではないが)、IDの代わりに行への参照を関数に渡す方が合理的です。あなたの仕事で何をしていますか?これに答えると、より具体的な答えを得ることができます。 – RoToRa

答えて

1

var currentRowID, table = document.getElementById('your-table'); 
var rows = table.rows; 
var row_count = rows.length; 

for(var i = 0; i < row_count; i++) { 
    rows[i].onclick = function() { 
     currentRowID = this.id; 
     //do something with currentRowID here... 
    }; 
} 

jsFiddle example

0

を使用すると、クリックに対応するイベントハンドラを手配するときは、要素がクリックされたかを把握できるように、ブラウザは、物事を設定します(イベントの "目標")。

function handleRowClicks(e) { 
    e = e || window.event; 
    if (!e.target.tagName.toLowerCase() === "tr") return; 
    var rowId = e.target.id; 
    /* 
    whatever you want to do goes here 
    */ 
} 

// To set up the event handler, do this in your "window.onload" or some 
// other initialization point 

document.getElementsByTagName("table")[0].onclick = handleRowClicks; 

これが一つだけ異なるアプローチの束のである:あなたのJavaScriptでは、あなたの<table>は、ページ上の唯一のテーブルであると仮定すると、このような何かを行うことができます。 Javascriptフレームワーク/ライブラリを使用する場合は、多少単純になりますが、それほど簡単ではありません。

このアプローチでは、行自体ではなく<table>のレベルでクリックが処理されることに注意してください。これにより、少し初期化作業が省けます。他の例と同様に

0

は、ここにあなたが純粋なJavaScriptでこれを行うことができます方法は次のとおりです。私の意見では

// Pure JavaScript: 
var table = document.getElementById("table-one"); 
var rows = table.rows; 
var length = rows.length; 

for(var i = 0; i < length; i++) { 
    rows[i].onclick = function() { 
     alert(this.id); 
     // Do more stuff with this id. 
    } 
} 

は、この特定の問題がjQueryで非常にうまく解決しています。このような他の操作を実行している場合、jQueryは時間を節約し、コードの複雑さを抑えます。これで上記の比較:http://jsfiddle.net/andrewwhitaker/9HEQk/

0

それを行うための最も簡単な方法は次のとおりです。

// jQuery: 
$("#table-one tr").bind("click", function() { 
    alert(this.id); 
}); 

bindがちょうどよく、ハンドラ:)

作業をサンプルにイベントをバインドするjQueryの方法であり、 jQueryフレームワークを使用します。

// Your function 
function MyFunc(rowId){ 
    alert(rowId); 
} 
// Binde click event to all rows with class "ClockableRow" 
// within table with class "clickableTable" 
$(".clickableTable .clickableRow").click(function(){ 
    // Call you function and pass clicked row ID there 
    MyFunc($(this).attr("id")); 
}) 

あなたのテーブルには、次のようになりshoul:

<table class="clickableTable"> 
    <tr id="row1" class="clickableRow"><td>row 1</td></tr> 
    <tr id="row2" class="clickableRow"><td>row 2</td></tr> 
    <tr id="row3" class="clickableRow"><td>row 3</td></tr> 
    <tr id="row4" class="clickableRow"><td>row 4</td></tr> 
    <tr id="row5" class="clickableRow"><td>row 5</td></tr> 
</table> 

example

関連する問題