好的,开始吧。我有一个可点击的图像(很巧妙,对吧?):
<DIV id="<?PHP echo($row[number]); ?>">
<IMG TITLE="Favorite!" src="drool_bw_nobg.png"
align="center" onclick = "favorite(<?PHP echo($row[number]); ?>)">
<b>Like</b>
</DIV>
请记住,我已经使用PHP inline(上面的例子)完成了这个操作,并且使用一个echo()
语句,甚至一个''%s''
通配符的printf()
语句。
好的,当我点击图像时,Favorite(id)
javascript函数被调用。第一个命令是一个alert();
语句,后面跟着一些AJAX代码。
后者工作得很好,AJAX引用的php脚本在点击主页上的图像时工作得很好。
然后你也可以点击其他图片,一切都很好,但是你点击了一个你已经点击过的图片,什么都没有,什么都没有。alert()
语句甚至没有弹出
真让人挠头。希望有人以前遇到过这个问题,并找到了一个聪明的解决方案。
这是我最喜欢的javascript函数:
function favorite(id){
alert(id);
getImage = document.getElementById(id);
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById(id).innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","getuser.php?img="+id,true);
xmlhttp.send();
}
就像我说的,一切都是第一次工作,但你必须刷新页面之前,你可以再次点击相同的图像。
问题来了。你有这样的内容(我已经删除了所有不相关的标签/属性/PHP):
<DIV id="1">
<IMG onclick="favorite(1);"/>
</DIV>
当你点击IMG
, favorite()
函数被调用。然后通过AJAX获取内容,并更新DIV
元素的innerHTML
。此时,将用从AJAX请求中检索到的内容替换DIV
内容。
AJAX内容很可能不包含onclick
处理程序,因此一旦更新了一次元素,onclick
处理程序就消失了。后续的点击将不再调用favorite()
方法。
只需将onclick
处理程序放在DIV
而不是IMG
上,一切都会好起来的。