2011-07-08 31 views
6

Mam kilka przycisków zagnieżdżone wewnątrz znaczników div w moim htmlWstawianie HTML do div przy użyciu JQuery

<div class="button-wrapper"> 
    <button class="button-class">Click here</button> 
</div> 
<div class="button-wrapper"> 
    <button class="button-class">Click here</button> 
</div> 
... 

klikając na przycisk stanowisk niektórych danych przy użyciu jQuery i zwraca niektóre HTML poprzez .ajax funkcji sukcesu . Próbuję zastąpić zawartość div dla każdego klikniętego przycisku, ale z jakiegoś powodu mój selektor JQuery nie działa.

Próbuję następujących wewnątrz mojej funkcji sukcesu:

$(this).parent().html(data); 

wiem, że dane są wysłane z powodzeniem i że funkcja sukces pracuje. Co dziwne jest to, że następujących prac:

$(".button-wrapper").html(data); 

ale oczywiście to dodaje HTML do każdego div, a nie tylko jeden dla przycisku, który kliknął.

Czy ktoś wie, gdzie może się nie udać?

+1

Wygląda na to, że to powinno działać, ale myślę, że masz problemy z zasięgiem, nie możemy tego powiedzieć, chyba że opublikujesz całą funkcję .ajax, opublikuj funkcję w całości –

+1

To brzmi jak inny numer słowa kluczowego 'ten'. Czy mógłbyś opublikować skrypt, który wykonuje zadanie wstawiania i zobaczymy? Nie możemy wiele powiedzieć bez spojrzenia na to. – shinkou

Odpowiedz

10

W jQuery "ten" jest często nadpisywany w ramach wywołania zwrotnego. Rozwiązaniem jest odniesienie do tej zmiennej za pomocą innej zmiennej:

var _this = this; //or var $_this = this; 
$(_this).parent().html(data); 
+0

pracował jak urok, dzięki! –

0

Zalecam użycie firebug do dostrojenia selektora.

Czy nie możesz ustawić unikalnych identyfikatorów dla każdego elementu div?

+0

dzięki @Nico, mógłbym ustawić unikalne identyfikatory, ale miałem nadzieję, że nie będę musiał tego robić i okazało się, że nie! –

3

Problem polega na tym, że w twoim oddzwonieniu this nie jest już przyciskiem. Spróbuj tego:

$(".button-wrapper").click(function(){ 
    var that=this; 
    $.ajax(
     // ... 
     success: function(data){ 
     $(that).parent().html(data); 
     } 
    ); 
}); 
+0

+ 1 dzięki, to działa świetnie! Było kilka podobnych odpowiedzi, więc poszło z pierwszą odpowiedzią, która została wysłana. –

0

HTML:

<div class="button-wrapper"> 
    <button class="button-class">Click here</button> 
</div> 
<div class="button-wrapper"> 
    <button class="button-class">Click here</button> 
</div> 

JS:

$.ajax({ 
//.. 
     success: function(){ 
     $(".button-class").click(function(){ 
      $(this).parent().html("Dynamic Html"); 
     }); 
     } 
    }); 
+0

dziękuje @ kmb385, ale tylko fyi testowałem to i to w rzeczywistości nie działało. –

0

Powinieneś wiedzieć, że trzeba załadować rejestr EG funkcji sukcesu: setInterval(myFunction,2500);

4

Będzie pomocne dla ciebie ....

$("button").click(function(){ 
    $("div").html("Hello <b>world</b>!"); 
}); 
+0

Pytanie dotyczy odniesienia do poprawnego 'this' wewnątrz wywołania zwrotnego jQuery. Ta odpowiedź jest nieistotna (z wyjątkiem twoich znajomych do seryjnego przegłosowania) -1 –

Powiązane problemy