要求是在点击任何表行数据时获取id的值。
请找小提琴:http://jsfiddle.net/T887t/55/
以下是我试过的javascript:
<script>
function test(){
alert("test called");
var serviceID = $(this).attr('id');
alert("serviceID :: " + serviceID);
}
</script>
html代码:
<table border="1">
<tr>
<th><b> Column1 </b> </th>
<th><b> Column2 </b> </th>
</tr>
<tr>
<td class="navigateTest" id="88" onclick="test()"> Row1 - Data1 </td>
<td class="navigateTest" id="98" onclick="test()"> Row1 - Data2 </td>
</tr>
<tr>
<td class="navigateTest" id="33" onclick="test()"> Row2 - Data1 </td>
<td class="navigateTest" id="55" onclick="test()"> Row2 - Data2 </td>
</tr>
</table>
无法在javascript函数中获取id的值。 id的值在我的应用程序中是动态的。请建议。
答案 0 :(得分:7)
如果您打算使用jQuery,那么也要使用它的事件绑定
$('.navigateTest').click(function(){
alert("test called");
var serviceID = this.id;
alert("serviceID :: " + serviceID);
});
您将不再需要使用此代码段内联onclick=test()
。
这将使用class = nagivateTest查询所有元素,并为它们分配一个单击处理程序。点击后,this
将引用回调内部点击的元素。
原始代码不起作用的原因是因为全局回调中的this
为window
且与当前点击的元素无关。
如果要将此代码包含在头部或链接文件中,请确保将代码包装在ready回调中,以便已解析DOM并且.navigateTest
元素可用。这看起来像这样:
$(function(){ //jQuery shortcut for .ready (ensures DOM ready)
$('.navigateTest').click(function(){
alert("test called");
var serviceID = this.id;
alert("serviceID :: " + serviceID);
});
});
答案 1 :(得分:2)
这是一个有效的jsFiddle。
使用普通javascript,您可以使用事件侦听器仅在单击表时运行。使用事件监听器避免了内联javascript的需要这被认为是不好的做法(当它可以避免时)并且使得更清晰,更容易维护/读取代码。有关事件监听器的更多信息,请阅读this。
<script>
// get a reference to the table
var table = document.querySelector('table');
// listen for a click
table.addEventListener('click', function(ev){
// get the event targets ID
var serviceID = ev.target.id;
alert(serviceID);
})
</script>
<table border="1">
<tr>
<th><b> Column1 </b> </th>
<th><b> Column2 </b> </th>
</tr>
<tr>
<td class="navigateTest" id="88"> Row1 - Data1 </td>
<td class="navigateTest" id="98"> Row1 - Data2 </td>
</tr>
<tr>
<td class="navigateTest" id="33"> Row2 - Data1 </td>
<td class="navigateTest" id="55"> Row2 - Data2 </td>
</tr>
</table>
答案 2 :(得分:0)
摆脱内联事件处理程序并使用:
$('.navigateTest').click(function () {
alert("test called");
var serviceID = $(this).attr('id');
alert("serviceID :: " + serviceID);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table border="1">
<tr>
<th><b> Column1 </b>
</th>
<th><b> Column2 </b>
</th>
</tr>
<tr>
<td class="navigateTest" id="88">Row1 - Data1</td>
<td class="navigateTest" id="98">Row1 - Data2</td>
</tr>
<tr>
<td class="navigateTest" id="33">Row2 - Data1</td>
<td class="navigateTest" id="55">Row2 - Data2</td>
</tr>
</table>
答案 3 :(得分:0)
<table border="1">
<tr>
<th><b> Column1 </b> </th>
<th><b> Column2 </b> </th>
</tr>
<tr>
<td class="navigateTest" id="88" onclick="test(88)"> Row1 - Data1 </td>
<td class="navigateTest" id="98" onclick="test(98)"> Row1 - Data2 </td>
</tr>
<tr>
<td class="navigateTest" id="33" onclick="test(33)"> Row2 - Data1 </td>
<td class="navigateTest" id="55" onclick="test(55)"> Row2 - Data2 </td>
</tr>
</table>
function test(id)
{
var id = id;
}