entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Problema para actualizar el estado de un checkbox jQuery

Hola, estoy tratando de actualizar el estado de un checkbox dependiendo del resultado de una petición ajax que es lanzada al hacer click sobre el mismo checkbox, actualmente tengo el código así pero no funciona.

$('#modulos input[data-role="modificador"]').on( "click", function(e){
        var peticion = $(this).is(':checked')? 'instalar' : 'desinstalar';
        var directorio = $(this).closest('tr').data('modulo');
        $.ajax({
            url: '../'+directorio+'/instalador.php',
            type: 'POST',
            async: true,
            dataType: 'json',
            data: {
                peticion : peticion,
                directorio: directorio
            },
            success: function(data){
                if(data.estado == "instalado"){
                    $(this).prop('checked', true);
                }else{
                    $(this).prop('checked', false);                 
                }
            },
            beforeSend: function(){
                $emergente.fadeIn(200);
            },
            complete: function(){
                $emergente.fadeOut(200);
            }
       });
});

y la idea es que cuando en el success el data.estado sea diferente de "instalado" no cambie el estado del checkbox. Gracias de antemano.

1 Respuesta

3votos

white Puntos75620

Hola @YennyDelgado, el contexto del callback success es diferente, debes establecer this a una variable previamente, enviarla como propiedad de $.ajax o establecer el contexto en $.ajax.

intenta definir el contexto de esta forma:

$.ajax({
    context: this, // establecemos el contexto

tu codigo queda asi:

$('#modulos input[data-role="modificador"]').on( "click", function(e){
        var peticion = $(this).is(':checked')? 'instalar' : 'desinstalar';
        var directorio = $(this).closest('tr').data('modulo');
        $.ajax({
            context: this,
            url: '../'+directorio+'/instalador.php',
            type: 'POST',
            async: true,
            dataType: 'json',
            data: {
                peticion : peticion,
                directorio: directorio
            },
            success: function(data){
                if(data.estado == "instalado"){
                    $(this).prop('checked', true);
                }else{
                    $(this).prop('checked', false);                 
                }
            },
            beforeSend: function(){
                $emergente.fadeIn(200);
            },
            complete: function(){
                $emergente.fadeOut(200);
            }
       });
});

jquery Ajax #context option
El valor de this en Javascript: cómo manejarlo correctamente
this - Javascript | mozilla MDN

YennyDelgado comentado Abr 9, 2015

Fue de gran ayuda :)
Gracias

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Otras Preguntas y Respuestas


Actividad Reciente

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta