Hola!
Estoy realizando un pequeño proyectillo y haciendo una cosa que en un principio puede ser una chorrada me he encontrado con lo siguiente:
Supongamos que tengo un elemento A que se abre con un click en un botón B y se cierra cuando haces click fuera de A. Para ello bindeo el click en B, y como manejador pongo una función que seria tal que:
function abrir(){
//cosas
$(B).bind('clickoutside',cerrar);
}
En este caso para el evento clickoutside estoy utilizando este plugin de jquery http://benalman.com/code/projects/jquery-outside-events/examples/clickoutside/
El problema que me he encontrado es que se esto entra en condición de carrera con el propio bubbling del click en A, con lo que, tras llegar el click al document, detecta que es clickoutside de B y se cierra. Lo lógico sería hacer un preventdefault en abrir, pero si hago esto y tengo en la web otros elementos que se cierran con clickoutside no se cerrarán, ya que no he permitido el bubbling en el click.
Buscando por internet he encontrado que "la solución" es meter el bind del evento clickoutside en un setTimeout con 0 ms de retardo, de esta manera primero se resuelve la pila de eventos de js, y luego hace el bind, con lo que no se cerraría instantaneamente. Sabeis si existe alguna otra solución aceptable que no sea meterlo dentro de un settimeout?