2010-10-13 108 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。