¿Cuál es la forma más fácil de hacer un clic en jquery? Donde se oculta un cuadro de div en cualquier lugar fuera de él.Hacer clic en jquery
Respuesta
No me gustan las soluciones que utilizan stopPropagation
porque a menudo estoy usando la propagación de eventos para gestionar varios enlaces. No quiero tener que preocuparme de que dejen de funcionar si existe la caja. Mi elección sería algo como esto:
var $box = $('#box');
$(document.body).click(function(){
if (!$box.has(this).length) { // if the click was not within $box
$box.hide();
}
});
La función has
filtra la selección y vuelve elementos sólo si contienen el elemento pasado como parámetro (también se puede utilizar una cadena de selección, pero eso no es relevante aquí) Si el clic fuera del cuadro, length
será 0
, por lo tanto, el condicional pasará y el cuadro estará oculto.
Esto se debe optimizar estableciendo un valor booleano para si el cuadro está actualmente visible y solo haciendo la llamada has
si está actualmente visible.
$('body').click(function() {
$('#box').fadeOut();
});
$('#box').click(function(e) {
e.stopPropagation();
});
Esto funciona porque #box recibirá el evento click primero si hace clic adentro. Como la propagación se detiene, el controlador adjunto al cuerpo no lo recibirá, por lo que no se cerrará a menos que haga clic fuera de la caja.
Si usted quiere que ocultar de inmediato, utilice .hide()
Tengo el stopPropagation() engañar a partir How do I detect a click outside an element?
Esto se ocultaría si hace clic dentro del div, no afuera. –
Ah ... leyó mal la pregunta. – ThiefMaster
Sé que jQuery tiene el evento "focusout" de elementos de formulario, no está seguro si pudiera tal vez ser utilizado para una
así:
$("#thediv").show(0, function() {
var that = $(this);
$(document).bind("click", function(e) {
if($(e.target).attr("id") != that.attr("id")) {
that.hide();
$(this).unbind("click");
}
});
});
violín aquí: http://jsfiddle.net/XYbmE/3/
Bien hecho, sin embargo @lonesomeday es más limpio. – Hussein
unen a una función de clic al propio documento:
$(document).click(function(){
alert('doc');
});
A continuación, se unen una función para el mismo evento en el propio div y volver falsa por lo que el evento será no brotan al documento .
$('#mydiv').click(function(e){
alert('mydiv click');
return false;
}
Mejor uso 'e.stopPropagation()' en lugar de 'return false;'. – ThiefMaster
Aquí está mi solución
var ClickOut = {};
ClickOut.list = [];
ClickOut.Add = function(jqel, callback) {
var i = ClickOut.list.push({jqel:jqel, callback:callback});
return (i-1);
}
ClickOut.Remove = function(i) {
ClickOut.list.splice(i, 1);
}
ClickOut.Init = function() {
$('body').click(function(e) {
for(var x = 0; x < ClickOut.list.length; x++) {
if (!ClickOut.list[x].jqel.has(e.target).length) {
ClickOut.list[x].callback();
}
}
});
}
recomiendo utilizar este lib https://github.com/gsantiago/jquery-clickout. ¡Es impresionante!
$('button').on('clickout', function (e) {
console.log('click outside button')
})
- 1. Marcador al hacer clic con jQuery
- 2. Jquery móvil: Cambiar tema al hacer clic
- 3. JQuery alternar filas al hacer clic
- 4. Jquery cambiar imagen al hacer clic
- 5. Hacer un enlace Negrita al hacer clic con Jquery
- 6. jQuery Bounce Effect al hacer clic no jQuery UI
- 7. cambiar li activo al hacer clic en un enlace jquery
- 8. Agregar atributo 'marcado' al hacer clic en jquery
- 9. excluir fines de semana para hacer clic en jQuery datepicker
- 10. Desactivar hacer clic derecho en las imágenes usando jquery
- 11. Crear dinámicamente y "hacer clic" en un enlace con jQuery
- 12. Buscar en Hacer clic con Autocompletar de Jquery
- 13. enviar formulario al hacer clic en evento usando jquery
- 14. JQuery JEditable - Cómo deshabilitar al hacer clic en edición
- 15. jQuery: desencadenar eventos al hacer clic en un enlace Número
- 16. Cómo llamar a jQuery AJAX al hacer clic en evento?
- 17. jQuery hacer clic/cambiar función en el botón de opción
- 18. Hacer enlaces hacer clic en Javascript?
- 19. jQuery, haga clic en el elemento interior de elemento puede hacer clic
- 20. Hacer una entrada de no-hacer clic en enviar
- 21. jquery - desactivar haga clic en
- 22. Diálogo de Jquery simple pero ahora al hacer clic
- 23. jQuery - eliminar dinámicamente los elementos del encabezado al hacer clic
- 24. Mostrar div #id al hacer clic con jQuery
- 25. jQuery Fadeout al hacer clic o después de la demora
- 26. jquery fancybox - evitar cerrar al hacer clic fuera de fancybox
- 27. jQuery: Al hacer clic, evitar el evento de mouseenter
- 28. jquery cambiar el estilo de un div al hacer clic
- 29. Hacer clic muy rápido con la galería de diapositivas (jquery)
- 30. Cómo hacer que los hipervínculos en el plugin dynaTree jQuery puedan hacer clic?
ordenado y simple – Hussein
Esto no funcionó para mí, pero después de mirar la respuesta de Caspar lo hice funcionar cambiando 'this' por' e.target' y agregando 'e' como argumento a la devolución de llamada. – meustrus