HTML PHP onclick只工作一次


HTML PHP onclick only working once

好的,开始吧。我有一个可点击的图像(很巧妙,对吧?):

<DIV id="<?PHP echo($row[number]); ?>">                                                                                         
    <IMG TITLE="Favorite!" src="drool_bw_nobg.png" 
    align="center" onclick = "favorite(<?PHP echo($row[number]); ?>)"> &nbsp;
      <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上,一切都会好起来的。