我是javascript的新手,我在动态更改html中锚标记的onclick属性时遇到了问题。以下是我的代码:
function changeImage(){
var charAll = <?php echo json_encode($_SESSION['char_all']); ?>;
var charCount = 0;
for (var key in charAll) {
var charDiv = document.getElementById(key);
var anchorTag = charDiv.getElementsByTagName('a')[0];
anchorTag.onclick = function(){startChar('1', charAll[key].toString());};
}
}
&#13;
<ul id="portfolio-list" data-animated="fadeIn">
<li id="character1">
<img src="character1.jpg" width="250px" height="280px" alt="" />
<div class="portfolio-item-content">
<span class="header">Play!</span>
<p class="body"></p>
</div>
<a href="#" onclick="startChar('1', '1')"><i class="more">></i></a>
<div class="post-info">
<div class="post-basic-info">
<h3 class="text-center">Character 1</h3>
</div>
</div>
</li>
<li id="character2">
<img src="character2.jpg" width="250px" height="280px" alt="" />
<div class="portfolio-item-content">
<span class="header">Play!</span>
<p class="body"></p>
</div>
<a href="#" onclick="startChar('1', '1')"><i class="more">></i></a>
<div class="post-info">
<div class="post-basic-info">
<h3 class="text-center">Character 2</h3>
</div>
</div>
</li>
</ul>
&#13;
我打算做的是更改每个<li>
元素的onclick功能。会话变量$_SESSION['char_all']
是php中的字典,其中键是字符名称(字符串),值是与数据库表中的字符名称对应的字符id。因此,理想情况下<a>
标记下的<li>
标记应获得startChar('1', '1')
(对于字符1)和startChar('1', '2')
(对于字符2)的onclick属性。但是,对于这两个角色,我最终得到的是startChar('1', '2')
。
我哪里错了?我可能会忽略这些非常愚蠢的事情。但是,我无法弄明白。所以,请帮帮我!
答案 0 :(得分:1)
您的for in
程序会引用key
,这会在迭代过程中发生变化charAll
。
作为一个解决方案(未经测试),您可能希望将该函数包装在外部匿名函数中并将key
传递给它:
(function(currentKey) {
anchorTag.onclick = function(){startChar('1', charAll[currentKey].toString());};
})(key);