2010-10-13 109 views
0

我正在尽我所能制作我的jQuery/AJAX脚本,但有时候我遇到了一些问题,比如现在,所以我正在寻求一些帮助!元素ID

在我网站的游戏页面上,在评论框中,你会发现有一个“Like(0)”链接,当你点击时,它实际上为评论添加了+1,没有任何页面重新加载。

在PHP方面,一切顺利,但在JavaScript部分,我遇到了ID的问题。我曾装过这个原代码:

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

如果我有问题,是document.getElementById("like")一部分。因为我有很多意见,我deceided给他们一个不同的ID来解决问题,所以评论1将有

<span id="like1">The +like stuff here</span> 

等(LIKE2,LIKE3等)

但在我的JS代码(我已经做了一些Actionscript,并使用evenement.currentTarget)我不知道如何去做。 (所以,如果我点击like10,它会更新像10跨度框。)

任何帮助将不胜感激!

我不知道我是否足够清楚,但谢谢反正!

+0

问题是如何获得事件的目标或其他东西? – 2010-10-13 21:40:41

+0

我的问题更像是,当您点击span id = like3内的链接时,它发送请求并更新相同的跨度。因为如果我只是把span id = like,我点击的任何跨度只会更新第一个。 – 2010-10-13 21:47:26

回答

0

这里是你如何做到这一点:

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

这将导致竞争条件。由于AJAX是*异步*,你不能保证'i'的值在请求发送和完成之间没有变化(在这种情况下,错误的ID将被更新) – 2010-10-13 21:45:14

+0

得到任何解决方案,这是保证更新正确的ID? – 2010-10-13 21:47:52

+0

@Daniel:取决于上下文。我把它变成了一个避免这个问题的潜力的函数。如果你把我的原始代码放在一个循环中,它会有这个问题 - 但是在它自己的函数中,它没问题。 – 2010-10-13 22:00:26

0

像这样的东西应该工作:

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请求,你可以把它指定哪些元素会更新,所以当它完成时更新正确的一个。

+0

好吧,试试吧,非常感谢! – 2010-10-13 22:11:14

0

既然你说你正在使用jQuery,听起来像你应该使用它的$.ajax.bind()函数,而不是原生js。