2010-11-25 5 views
2

Ich lade ein Ajax-Loader-Gif, wenn eine Abstimmungsschaltfläche geklickt wird. Das Bild erscheint jedoch für alle Elemente. Ich versuche herauszufinden, wie man das Bild nur für den Gegenstand, den ich gewählt habe, lädt. Das ist mein Code.Jquery add html() für einzelne Elemente

$(document).ready(function(){ 
    $(".vote").click(function(e) { 
     $('.ajax_load').html('<img src="/images/ajax-loader.gif" />'); 
     var item_id = $(this).attr("id"); 
     var dataString = 'item_id=' + item_id; 

    $.ajax({ 
     type: "POST", 
     url: "vote.php", 
     data: dataString, 
     cache: false, 
     success: function(html) { 
    $('.ajax_load').html('Voted!'); 
     } 
    }); 
    return false; 
}); 
}); 

HTML Probe

<div class="vote" id=88">Vote</div> <div class="ajax_load"> 
<div class="vote" id=92">Vote</div> <div class="ajax_load"> 
<div class="vote" id=38">Vote</div> <div class="ajax_load"> 
+0

Gibt es viele Gegenstände mit der Klasse 'ajax_load'? Wenn dies der Fall ist, müssen wir etwas HTML (* die Struktur *) sehen, damit wir sehen können, wie man nach diesem bestimmten Element filtern kann. (* Auch, warum verwenden Sie einen Auswahl-Tag-Selektor? Scheint ungültig *) –

+0

Konnten Sie a HTML-Beispiel, damit wir sicher sein können, welchen HTML-Code Sie verwenden? –

+0

sorry! Hinzugefügt – Rambo

Antwort

2

aus der HTML-Probe, es sieht aus wie die Elemente Geschwister sind so sollten Sie

$(this).nextAll('.ajax_load:first').html('<img src="/images/ajax-loader.gif" />'); 

um das Bild zu zeigen.

in den Erfolg Rückruf verwenden

$('#' + item_id).nextAll('.ajax_load:first').html('Voted!'); 

die spezifische gestimmt Element Ziel.

+0

Mate das funktioniert! Vielen Dank! Ich werde in die Dokumentation schauen und lernen, wie Ihr Code funktioniert – Rambo

0

versuchen

$("vote").click(function(e) { 
    $(this).html(...); 
0

Unter der Annahme, .ajax_load ein Kind der Abstimmung ist, dann können Sie dies ändern:

$('.ajax_load').html('<img src="/images/ajax-loader.gif" />'); 

zu:

$(this).find('.ajax_load').html('<img src="/images/ajax-loader.gif" />'); 

Das wird nur die .ajax_load, die ein Kind der Abstimmung ist, die angeklickt wurde, und nicht alle von ihnen.

Das gleiche in Ihrem Ajax Anruf. Ich glaube, $(this) sollte sich immer noch auf die angeklickte "Abstimmung" beziehen.

$('.ajax_load').html('Voted!'); 

Wird ...

$(this).find('.ajax_load').html('Voted!'); 

bearbeiten Okay, da html, es gibt ein paar Möglichkeiten, dies zu tun. Ich würde es auf diese Weise wahrscheinlich tun:

$(this).next('.ajax_load:first')... <- do whatever you'll do with the selection. 

Im Allgemeinen, wenn Sie versuchen, herauszufinden, wie ein div mit JQuery zu wählen, ein großartiger Ort zu suchen ist die JQuery Dokumentation für traversing und selecting.

+0

Danke für den Code! Das funktioniert perfekt für den .vote div, aber ich lade den Ajax-loader.gif in einem anderen div. Ich habe einige HTML-Beispiel hinzugefügt – Rambo

+0

@Rambo Bearbeitete die Antwort, sollte jetzt funktionieren. –

+0

der Code funktioniert immer noch nicht, aber ich habe die Links sehr nützlich gefunden! Ich denke mit jquery arbeiten wird jeder – Rambo

Verwandte Themen