循环内Jquery代码中的变量插值

时间:2015-08-11 17:11:56

标签: javascript jquery

我有一些代码,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?

2 个答案:

答案 0 :(得分:2)

您遇到的是基于您的代码的预期行为。

但是,您实际上要做的是将event data传递到您的click功能。这可以这样完成:

&#13;
&#13;
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;
&#13;
&#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

Updated jsFiddle