2016-08-08 17 views
2

ゴールは、ユーザーがそのテーブル内でクリックするhtmlテーブルの行番号を報告していました。質問には、どのtr要素がユーザーによってクリックされましたか?jQueryを使用してテーブル行のユーザーをクリックする - javaScriptを使用してテーブルを動的にロードする - ?

情報は前回掲載How to tell which row number is clicked in a table?

マイ挑戦は、テーブルは、私が「wasnことを、JavaScriptで動的にロードされたため、ということでした使用して、HTMLでテーブルにハードコードされたとき、私はこれを行うことができましたhtml、javascript、およびjQueryの間を適切にリンクすることができます。動的に生成されたテーブルの行をクリックしたとき、私はそれをやり取りしていました。

私はjQueryクラスに取り組んでおり、このような問題をよりよく理解する方法を楽しみにしています。しかし、物事に助けを借りて、私が学んでいる間に働く良い例があることは間違いありません。

以下はコードになりました。これはOzanが提案したコードを使用しています。

<!DOCTYPE HTML> 
<html> 
<head> 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 

<meta charset="utf-8"> 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

<button>Make Table</button> 
<div id="container"></div> 


<title>Board A</title> 


<script type="text/javascript" charset="utf-8"></script> 

<script src="mainTest.js"></script> 


    </head> 
    <center> 
    <img src="MarmotNapping.jpg" alt="Marmot" 

height="150" width="400" 
> 


    </center> 



<body> 

<p> Click in this line </p> 



<script> 
/* 
// First Stackoverflow question I used 
How to tell which row number is clicked in a table? 
https://stackoverflow.com/questions/4524661/how-to-tell-which-row-number-is-clicked-in-a-table 
You can achieve this with delegated event handling. 

Use jQuery's .on(eventName, selector, handler) method to attach the handler to an element you know will always be present, e.g. document. 
*/ 

//https://stackoverflow.com/questions/38820078/using-jquery-to-determine-table-row-user-clicking-on-when-table-loaded-dynamic 

// begin new 
$(document).on("click", "tr", function(e) { 
    var index = $(this).index(); //this is event.target, which is the clicked tr element in this case 
    console.log(index); 
    alert('0.You clicked row '+ ($(this).index()+1)); 
}); 

$("button").on("click", function() { 
    $("table").remove(); 
    var table = $("<table>").appendTo("#container"); 
    for (i = 0; i < 10; i++) { 
    $("<tr>").append($("<td>").text("This is " + i + ". row.")).appendTo(table); 

    } 
}); 

// end new 
$(document).ready(function(){ 
    $("p").click(function(){ 
     alert("The paragraph was clicked."); 
    }); 


}); 

$('#QuestionsAnswersTable').find('tr').click(function(){ 
    alert('1.You clicked row '+ ($(this).index()+1)); 
}); 

$('#QuestionsAnswersTable').find('tr').click(function(){ 
    var row = $(this).find('td:first').text(); 
    alert('2.You clicked ' + row); 
}); 



</script> 



</body> 

</html> 

答えて

4

質問は本当に明確ではありません。私はあなたが知っていることを理解してからtr要素がクリックされ、あなたのテーブルが動的に読み込まれます。これがあなたが意味するものでないなら、コメントの中で私を訂正してください。

delegated event handlingでこれを達成できます。

jQueryの.on(eventName, selector, handler)メソッドを使用して、常に存在することがわかっている要素にハンドラをアタッチします。 document

jQuery Delegated Events

$(document).on("click", "tr", function(e) { 
 
    var index = $(this).index(); //this is event.target, which is the clicked tr element in this case 
 
    console.log(index); 
 
}); 
 

 
$("button").on("click", function() { 
 
    $("table").remove(); 
 
    var table = $("<table>").appendTo("#container"); 
 
    for (i = 0; i < 10; i++) { 
 
    $("<tr>").append($("<td>").text("This is " + i + ". row.")).appendTo(table); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<button>Make Table</button> 
 
<div id="container"></div>

+0

オザン - 私は私の質問は不明であったことを知っていただき、ありがとうござい。今あなたが提案したものを試してみる。何があっても、私は質問を編集してより明確にしようとします。 – LaurelS

+0

問題ありません。それが役に立てば幸い。コードの書式を設定し、予想される動作とエラーを明確に説明し、そしてほとんどがスニペット、jsfiddleまたはそれと同等のもので[MVCExample](http://stackoverflow.com/help/mcve)を提供すると、より良い回答を得るチャンスが大幅に向上します。 – Ozan

+0

あなたは確かに働きました。ありがとうございました。 – LaurelS

関連する問題