Javascript 元素ID

Javascript 元素ID,javascript,Javascript,我正在尽最大努力编写jQuery/AJAX脚本,但有时会遇到一些问题,比如现在,所以我正在寻求帮助 在我的网站的一个游戏页面上,在评论框中,你会发现一个类似于0的链接,当你点击时,它实际上会在评论中添加+1,而不会重新加载任何页面 在PHP方面,一切进展顺利,但在javascript部分,我遇到了ID的问题。我的原始代码包含以下内容: xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 &&

我正在尽最大努力编写jQuery/AJAX脚本,但有时会遇到一些问题,比如现在,所以我正在寻求帮助

在我的网站的一个游戏页面上,在评论框中,你会发现一个类似于0的链接,当你点击时,它实际上会在评论中添加+1,而不会重新加载任何页面

在PHP方面,一切进展顺利,但在javascript部分,我遇到了ID的问题。我的原始代码包含以下内容:

xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("like").innerHTML=xmlhttp.responseText;
    }
  }
我遇到的问题是document.getElementByIdlike部分。因为我有很多评论,我欺骗了他们,给他们一个不同的ID来解决这个问题,所以评论1会有

<span id="like1">The +like stuff here</span> 
等等,像2,像3,等等

但是在我的JS代码中,我已经做了一些动作脚本,并且正在使用evenement.currentTarget,我不知道如何做。因此,如果我单击like10,它将更新like10跨度框

任何帮助都将不胜感激

我不知道我是否足够清楚,不过还是要谢谢你

以下是您的操作方法:

  function getComment(i)
  {
    ...
    xmlhttp.onreadystatechange=function()
    {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
      {
         document.getElementById("like"+i).innerHTML=xmlhttp.responseText;
      }
    }
  }

像这样的方法应该会奏效:

function handle_click(event)
{
  var evt = event || window.event; // IE doesn't pass along an event object
  var target = evt.target || evt.srcElement; // IE and W3C differ on what property to use
  var id_to_update = ... // figure out which ID needs updating (perhaps based on target)

  var request = setup_xhr(); // dummy function that sets up an XHR object
  request.open(...);
  request.onreadystatechange = function()
  {
    if (request.readyState == 4 && request.status == 200)
    {
      update_like(id_to_update, request.responseText)
    }
  }
}

function update_like(target, new_value)
{
  document.getElementById(target).innerHTML = new_value;
}

document.getElementById('[id of element]').addEventListener('click', handle_click); // only covers the W3C event model, but you get the idea

当事件侦听器函数设置AJAX请求时,您可以让它指定要更新的元素,因此当它完成时,会更新正确的元素。

既然您说您正在使用jQuery,听起来您应该使用它的$.ajax和.bind函数而不是本机js。

问题是如何获取事件或其他内容的目标?我的问题更像是,当您单击span id=like3中的链接时,它会发送请求,然后更新相同的span。因为如果我只输入span id=like,我单击的任何span都将只更新第一个span,这将导致竞争条件。由于AJAX是异步的,您不能保证i的值在发送请求和完成请求之间没有改变。在这种情况下,将更新错误的ID。是否有任何解决方案保证更新正确的ID?@Daniel:取决于上下文。我把它变成了一个函数,以避免潜在的问题。如果你把我的原始代码放在一个循环中,它会有这个问题——但是在它自己的函数中,这很好。你能给我解释一下吗?我对应用程序的上下文有点困惑,但是我猜您可能有一个链接并设置了它的点击事件:link1.onclick=function{getComment1;};