2010-12-17 24 views
14

Sé que hay algunas preguntas que se parecen a las mías, pero en este caso quiero que también se elimine el botón eliminar y no sé cómo puedo hacerlo. .Eliminar elementos onclick (incluido el botón eliminar) con jQuery

Aquí está mi pregunta;

Añado 3 elementos con jQuery cuando se hace clic en un botón de agregar. Incluyendo un botón para eliminar.

Quiero este botón para eliminarlo uno mismo y los otros dos elementos. El contador debe hacer identificaciones idénticas, pero no estoy seguro de haberlo hecho correctamente con jQuery.

¿Cómo puedo eliminar tres elementos, incluido el botón eliminar al hacer clic?

$(function() { 
var counter = 0; 

    $('a').click(function() { 
    $('#box').append('<input type="checkbox" id="checkbox" + (counter) + "/>'); 
    $('#box').append('<input type="text" id="t1" + (counter) + "/>'); 
    $('#box').append('<input type="button" value="." id="removebtn" + (counter) + "/>'); 
    $("#box").append("<br />"); 
    $("#box").append("<br />"); 
    counter++; 
    }); 

$('removebtn').click(function() { 
remove("checkbox"); 

}); 
}); 

gracias de antemano

Respuesta

17

mi sugerencia sería así.

$(function() { 
    var counter = 0; 

    $('a').click(function() { 
     var elems = '<div>'+ 
       '<input type="checkbox" id="checkbox"' + (counter) + '" class="item"/>' + 
       '<input type="text" id="t1"' + (counter) + '"/>' + 
       '<input type="button" class="removebtn" value="." id="removebtn"' + (counter) + '"/>' + 
     '</div>'; 
     $('#box').append(elems); 
     $("#box").append("<br />"); 
     $("#box").append("<br />"); 
     counter++; 
    }); 

    $('.removebtn').live(function() { 
     $(this).parent().remove(); 
    }); 
}); 

simple demo

+0

Muchas gracias – Opoe

+1

Solo menciono, para cualquier lector que use la versión jQuery> = 1.7, el método .live() ahora está en desuso. Deberíamos usar el método .on() para adjuntar controladores de eventos. Por lo tanto, las últimas líneas deberían cambiarse a: $ (documento) .on ('clic', '.removebtn', función() { $ (esto). parent(). remove(); – skechav

5

Supongamos identificación de su botón de eliminación es # removebtn1234. Entonces

$("#removebtn1234").click(function(){ 
    $(this).remove(); 
}); 

debería funcionar

Sin embargo, para facilitar la manipulación en artículos múltiples, le sugiero que modifica al siguiente:

$('a').click(function() { 
    $('#box').append('<input type="checkbox" data-id="' + counter + '"/>'); 
    $('#box').append('<input type="text" data-id="' + counter + '"/>'); 
    $('#box').append('<input type="button" value="." class="removebtn" data-id="' + counter + '"/>'); 
    $("#box").append("<br /><br/>"); 
    counter++; 
}); 

$(".removebtn").click(function(){ 
    var id = $(this).data("id"); 
    $("*[data-id=" + id + "]").remove(); 
}); 
+0

como esta? $ ("# removebtn1234") Haga clic en (function() {$ (este) .Remove(); . $ ("El1" + contador ") remove();. $ (" el2" + contador") .remove(); }); – Opoe

+0

Modifiqué la respuesta, aún puede poner la identificación, pero simplemente dibuja el ID como campo de datos para una manipulación más fácil. – xandy

+0

Muchas gracias xandy, el appendbutton ya no agrega nada más con este código – Opoe

4

he aquí una solución (que parece más desordenado de lo que debería, pero no puedo poner mi dedo sobre ella).

$(function() { 
    var counter = 0; 

    $('a').click(function() { 

     var checkBox = $('<input type="checkbox" id="checkbox' + (counter) + '"/>'), 
      textBox = $('<input type="text" id="t1' + (counter) + '"/>'), 
      removeButton = $('<input type="button" value="." id="removebtn' + (counter) + '"/>'), 
      containerDiv = $("<div />"); 

     removeButton.click(function(e) { 
      e.preventDefault(); 
      containerDiv.remove(); 
     }); 

     containerDiv 
      .append(checkBox) 
      .append(textBox) 
      .append(removeButton); 

     counter++; 

     $("#box").append(containerDiv); 
    }); 
}); 

En esta solución, hago una variable de la referencia jQuery. De esta forma podemos llamar a cosas como checkBox.remove() y solo hará referencia a esa casilla de verificación (sin tratar de calcular la URL).

Lo he modificado un poco y eliminado las etiquetas <br /> y envuelto todo en un <div />. De esta forma, puedes eliminar el contenedor div y todos los elementos irán.

Ejemplo: http://jsfiddle.net/jonathon/YuyPB/

+0

¡Muchas gracias! :) – Opoe

+0

Gracias, mejor que la respuesta correcta porque funciona incluso después de las versiones de jquery 1.9.1. – Tibix

Cuestiones relacionadas