Jquery on () evento de carga en un solo elemento

4 minutos de lectura

Lo siento si esta pregunta ya se ha hecho, pero no encontré una solución.

Tengo 3 elementos de radio y quiero verificar el valor cuando cambia la selección y cuando se carga la página.

Lo haría usando solo la función on().

Mi problema es que solo se activa el evento de cambio.

Aquí está mi código actual :

$('.user').on('load change', function(){
  if($(this).val() == 'client'){ 
$('#user_parent').removeAttr('disabled').closest('tr').show(200);
}else{
  $('#user_parent').attr('disabled', 'disabled').closest('tr').hide(200);
}
});"

También traté de reemplazar la carga por listo, pero también falló. Cuál es el problema ? ¿No está disponible el evento de carga para un solo elemento?

El código se coloca en $(document).ready(…), y todos los elementos se muestran cuando se envía la página.

Gracias

  • @Cherniv ya, y el guión también, ¡vaya!

    – A. Wolff

    1 de julio de 2013 a las 8:31


  • @asado pero input 100% no

    – Iván Chernykh

    1 de julio de 2013 a las 8:31

  • stackoverflow.com/questions/8608145/…

    – rahularyansharma

    1 de julio de 2013 a las 8:31

  • solo usa la carga de documentos??

    – David Fregoli

    1 de julio de 2013 a las 8:32

  • También probé “$(document).on(‘ready change’, ‘.user’, function(){“. Pensé que el evento de carga aplicado en un elemento se activaba cuando se cargaba el elemento, como documento.

    – FLX

    1 de julio de 2013 a las 8:34

avatar de usuario
Vogel612

la load El evento se llamará en el momento en que se carguen todos los elementos secundarios del elemento escuchado. en su caso, esto podría ser antes de que se llame al evento listo, lo que hace que su controlador se cargue (que se adjunta después de document.ready) inútil.

para referencia ver API de JQuery donde encontraras lo siguiente:

El evento de carga se envía a un elemento cuando éste y todos los subelementos se han cargado por completo. Este evento se puede enviar a cualquier elemento asociado con una URL: imágenes, scripts, marcos, iframes y el objeto de la ventana.

esto también significa que necesita una URL, para que pueda escuchar el evento de carga. como no ha proporcionado más código, asumo que sí tiene una URL que puede escuchar.

Sin embargo, esta podría ser la causa más probable. si lo haces no tener ninguna URL asociada con (al menos uno) elemento(s) secundario(s) no habrá evento de carga puedes escuchar

prueba esto en su lugar:

$(document).ready(function(){
   checkUserVal();
   $('.user').on('change', checkUserVal);
});

var checkUserVal = function(){
  //do the check
  if($('.user').val() == 'client'){ 
     $('#user_parent').removeAttr('disabled').closest('tr').show(200);
  }else{
     $('#user_parent').attr('disabled', 'disabled').closest('tr').hide(200);
  }
};

hice del código un método para mejorar la legibilidad;)

  • @roasted gracias por arreglarme allí. lo divertido es que el evento de carga para el elemento que escucha, aún podría llamarse antes de estar listo, vea la respuesta actualizada

    – Vogel612

    1 de julio de 2013 a las 8:43


  • La cuestión es que puede adjuntar un controlador a un elemento solo cuando el elemento está listo/disponible en el DOM. Puedo pensar en un caso en el que adjunta un evento de carga a una imagen/secuencia de comandos justo después de esta etiqueta de elemento y este elemento ya está en caché. En este caso, creo que tiene razón, el evento de carga debe activarse antes de que el documento esté listo. De todos modos, buen aporte de hecho +1

    – A. Wolff

    1 de julio de 2013 a las 8:49


  • Gracias por la respuesta, ¿sería mejor hacer una función como esta solución o hacer un evento personalizado que active en el documento listo? Porque usaré este sistema varias veces.

    – FLX

    1 de julio de 2013 a las 8:53

  • @ Vogel612 siguiendo mi comentario anterior, incluso almacenado en caché, el evento de carga de una imagen aún se activa después de que el documento está listo: jsfiddle.net/w4zSj

    – A. Wolff

    1 de julio de 2013 a las 8:55


  • @ Vogel612 div no tiene ningún evento de carga para adjuntar. Entonces, seguro, el evento de carga no se activará.

    – A. Wolff

    1 de julio de 2013 a las 9:10

Como explicó Vogel612, load no dispara para la mayoría de los elementos.

ready es solo para document.

Puedes usar each para ejecutar su controlador de eventos inicialmente.

$(document).ready(function(){
  $('.user')
    .each(user_handler)
    .on('change', user_handler);
});

var user_handler = function(){
  // this
};

avatar de usuario
Hisham Dalal

<script>
jQuery( 'document' ).on("load ready", function() {
    $('.user').on('change', function(){
        if($(this).val() == 'client'){ 
            $('#user_parent').removeAttr('disabled').closest('tr').show(200);
        }else{
            $('#user_parent').attr('disabled', 'disabled').closest('tr').hide(200);
        }
    });
    // just do this:
    $('.user').change();
    });
</script>

¿Ha sido útil esta solución?