2011-07-08 24 views
6

Tengo un montón de botones anidados dentro de las etiquetas div en mi htmlInsertar HTML en DIV usando 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> 
... 

Al hacer clic en el botón Mensajes algunos datos utilizando jQuery y devuelve algo de HTML a través de una función de éxito .ajax . Intento reemplazar el contenido del div para cada botón en el que se hace clic, pero por alguna razón mi selector JQuery no parece funcionar.

estoy tratando la siguiente función dentro de mi éxito:

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

sé que los datos se han publicado correctamente y que la función del éxito está trabajando. Lo raro es que las siguientes obras:

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

pero obviamente esto se suma el HTML para cada div, no sólo el uno para el botón que se hace clic.

¿Alguien sabe dónde podría ir mal aquí?

+1

Parece que esto debería funcionar, pero creo que tiene problemas de alcance, no podemos decir esto a menos que publique la función .ajax completa, publique la función en su totalidad –

+1

Parece otro problema de la palabra clave 'esto'. ¿Podría publicar el script que hace el trabajo de inserción y nos permite ver? No podemos decir mucho sin echarle un vistazo. – shinkou

Respuesta

10

En jQuery 'esto' se sobrescribe comúnmente dentro de una devolución de llamada. La solución consiste en hacer referencia a esto utilizando otra variable:

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

funcionó como un encanto, gracias! –

0

Recomendaría usar firebug para sintonizar su selector.

Aparte de eso, no se puede establecer que los identificadores únicos para cada div?

+0

gracias @Nico, podría haber establecido identificaciones únicas pero esperaba no tener que hacer eso y resultó que no lo hice. –

3

El problema es que en su devolución de llamada this no es el botón más. Prueba esto:

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

+ 1 gracias, ¡esto funciona genial! Hubo un par de respuestas similares, así que fue con la primera respuesta que se publicó. –

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

gracias @ kmb385, pero solo fyi lo probé y en realidad no funcionó. –

0

Debería saber que es necesario cargar registro de la función del éxito por ejemplo: setInterval(myFunction,2500);

4

Esta voluntad útil para usted ....

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

La pregunta es acerca de una referencia al 'this' correcto dentro de una devolución de llamada jQuery. Esta respuesta es irrelevante (excepto para sus amigos a la votación en serie) -1 –