$(‘cuerpo’).on(‘clic’, ‘.cualquier cosa’, función(){})

4 minutos de lectura

avatar de usuario de fancy
lujoso

$('body').on('click', '.anything', function() {
    //code
});

no funciona para nada en este momento y no puedo entender por qué. Puedo anclarme a cualquier otra cosa, digamos que solo lanzo un #wrap div justo dentro del body. Entonces soy capaz de hacer

$('#wrap').on('click', '.anything', function() {
    //code
});

para cualquier elemento que quiera.

¿Alguna idea de lo que podría haber hecho para desactivar esta habilidad en el elemento del cuerpo?

¡Gracias!

  • tienes un event.stopPropagation() o return false en un controlador de clic entre el elemento en el que está haciendo clic y el body ¿elemento?

    –David Tomás

    12 de agosto de 2012 a las 10:21

  • No puedo reproducir. ¿Podrías configurar un jsfiddle.net ¿manifestación? Debe estar sucediendo algo en su página que no está incluido en la pregunta.

    – pimvdb

    12 de agosto de 2012 a las 10:45


  • Entonces, ¿quiere hacer que alguna función relacionada con el evento de clic en el cuerpo no sea aplicable/no esté disponible para algún

    o algo en él?

    – Alfredo

    12 de agosto de 2012 a las 10:54

  • @pimvdb sabe que no es reproducible. Necesita ayuda para averiguar dónde buscar estadísticas, parte de una base de código más grande.

    – lujoso

    12 de agosto de 2012 a las 10:58

  • Intenta reemplazar body en el selector con html o document (sin comillas), y ver si eso resuelve el problema?

    – adeneo

    12/08/2012 a las 12:00

Avatar de usuario de Syed Arif Iqbal
Syed Arif Iqbal

Deberías usar $(document). Es un activador de función para cualquier evento de clic en el documento. Luego dentro puedes usar el jquery on("click","body *",somefunction), donde el segundo argumento especifica a qué elemento específico apuntar. En este caso todos los elementos del interior de la carrocería.

$(document).on('click','body *',function(){
    //  $(this) = your current element that clicked.
    // additional code
});

  • Considere editar su publicación para agregar más explicaciones sobre lo que hace su código y por qué resolverá el problema. Una respuesta que en su mayoría solo contiene código (incluso si está funcionando) generalmente no ayudará al OP a comprender su problema. También se recomienda que no publique una respuesta si es solo una suposición. Una buena respuesta tendrá una razón plausible de por qué podría resolver el problema del OP.

    – SuperBiasedMan

    18 de agosto de 2015 a las 8:56

  • @SuperBiasedMan gracias por corregirme. No explico mucho porque no soy hablante nativo de inglés y mi inglés no es bueno. pero hice mi mejor esfuerzo.

    –Syed Arif Iqbal

    18 de agosto de 2015 a las 9:09

  • Entiendo, edité el inglés en tu publicación para que sea un poco más claro ahora. Por lo general, las personas editarán las publicaciones para mejorarlas de esa manera, así que lo animo a que explique el código, incluso si está preocupado por la calidad de su inglés.

    – SuperBiasedMan

    18 de agosto de 2015 a las 9:27

  • Muchas gracias @SuperBiasedMan

    –Syed Arif Iqbal

    18 de agosto de 2015 a las 9:29

Puedes probar esto:

Debes seguir el siguiente formato

    $('element,id,class').on('click', function(){....});

*Código JQuery*

    $('body').addClass('.anything').on('click', function(){
      //do some code here i.e
      alert("ok");
    });

  • @fancy parece haberse olvidado de responder a su pregunta. Por favor, eche un vistazo de cerca a mi solución. Puede que me sea útil.

    – Cogigante

    8 de enero de 2013 a las 6:08

Avatar de usuario de Lemex
Lemex

Si desea capturar, haga clic en todo y luego haga

$("*").click(function(){
//code here
}

Yo uso esto para el selector: http://api.jquery.com/all-selector/

Esto se utiliza para gestionar los clics: http://api.jquery.com/click/

y luego usar http://api.jquery.com/event.preventDefault/

Para detener las acciones de clic normales.

  • Esto agrega un controlador a cada elemento en el DOM, lo cual es pesado para el navegador.

    – Joseph

    12 de agosto de 2012 a las 11:31

  • Además de lo que dijo Joseph, el código de ejemplo en la pregunta (si no fuera por el problema misterioso) llamaría al controlador solo cuando el elemento en el que se hizo clic coincida con el '.anything' selector. Con respecto a su comentario “y no se ha dicho el móvil”, si se trata de un sitio web público, se accederá desde dispositivos móviles; el OP no debería necesitar explicarlo explícitamente.

    – nnnnnn

    12 de agosto de 2012 a las 11:32


  • Además, si un elemento tiene 10 niveles de profundidad, dado que ese código está adjunto a todos elementos, se dispara 10 veces, una para el elemento y 9 para sus padres?

    – Joseph

    12 de agosto de 2012 a las 13:09


¿Ha sido útil esta solución?