我有一些代码,http://jsfiddle.net/hucw940s/ 它有一个for循环。
before
<div id="container">
</div>
after
for (i = 1; i < 4; i++){
var showMe = $('<a href=# id="link' + i + '">')
.append('click').click(function(){ alert('You clicked num: ' + i) });
$('#container').append(
$('<div id="div'+i+'">').append('this is div number: ' + i).append(showMe)
);
}
所以使用id = link1,link2,link3等生成链接,并且附加的div是相同的,但是onclick代码似乎在事件发生之后将var i放入,所以在点击任何链接时他们说&# 34;您点击了数字4&#34;
如何在点击时调用的函数内的单击链接中使用i?
答案 0 :(得分:2)
您遇到的是基于您的代码的预期行为。
但是,您实际上要做的是将event data传递到您的click功能。这可以这样完成:
for (i = 1; i < 4; i++) {
var showMe = $('<a href=# id="link' + i + '">').append('click')
.click({value: i}, function (e) { alert('You clicked num: ' + e.data.value) });
$('#container').append($('<div id="div' + i + '">').append('this is div number: ' + i).append(showMe));
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="container">
</div>
&#13;
{value: i}
。e
赋值给
event,所以我们可以访问数据属性。e.data.value
。您可以根据需要添加任意数量的事件数据对象,并以这种方式按名称引用它们。
您的代码无法正常工作的原因是,因为i
循环在3
循环完成之前,变量for
已经等于<script type="text/javascript">
$(document).ready(function(){
$("#testButton2").click(function(){
var tableInfo=document.getElementById("myTable");
console.log(tableInfo);
var tableArray= [];
for (var i = 1; i < tableInfo.rows.length; i++) {
//var row = tableInfo.rows[i];
var rowArray = [];
for (var j = 0; j < tableInfo.rows[i].length; j++) {
rowArray.push(tableInfo.rows[i].cells[j].innerHtml);
}
tableArray.push(rowArray);
}
alert(tableArray.toString());
});
});
</script>
<?php
$table = "info.csv";
$id = "myTable";
$count = 0;
echo "<table id=".$id.">\n\n";
$f = fopen($table, "r");
while (($line = fgetcsv($f)) !== false) {
echo "<tr>";
foreach ($line as $cell) {
if ($count != 0) {
echo "<td><input value=" . htmlspecialchars($cell) . "></input></td>";
} else {
echo "<td>" . htmlspecialchars($cell) . "</td>";
}
}
echo "</tr>\n";
$count += 1;
}
fclose($f); echo "\n</table>";
?>
您可以点击任何链接。
希望这有助于您更好地理解代码的行为方式以及解决问题的方法。
答案 1 :(得分:0)
将ID存储在data-attribute
。