Devolver falso en un ancla html no devuelve falso

Estoy tratando de corregir un error menor en mi caja de luz Javascript, mientras mantengo la edición lo más discreta posible.

Página de ejemplo: http://www.mattressonline.co.uk/Product/Silentnight-Miracoil-3-Gold-Label-Limited-Edition-Mattress-P43

El problema está en la imagen principal del producto. Si hace clic en cualquiera de las dos miniaturas, las imágenes se cargan dentro de la caja de luz como se esperaba. Al hacer clic en la imagen grande, se activa un evento que hace clic en la imagen de la galería, y puede ver que la caja de luz comienza a aparecer, pero luego se activa el evento predeterminado para una etiqueta y la imagen se carga en una ventana separada. Esta no debe suceda, ya que el enlace usa return false;

<a id="gallery-link" class="main" href="#" onclick="click($('gallery-image-0')); return false;" title="Gold Label Mattress">
    <img id="gallery-image" src="/content/products/280x175/silentnight-ariel-miracoil-gold-label-limited-edition.jpg" alt="Gold Label Mattress">
</a>

Aparte de eso, es prácticamente una configuración estándar de prototipo / scriptaculous / lightbox2.

¿Alguna idea de por qué return false no devuelve falso? Es increíblemente frustrante.

Editar: IE6 y 8 devuelven falso como se le dijo. Los actuales Firefox, Chrome e IE9 no lo hacen.

preguntado el 08 de noviembre de 11 a las 14:11

2 Respuestas

Las secuencias de comandos discretas normalmente significan no utilizar atributos en línea. La mejor práctica actual es adjuntar oyentes después de que el elemento se haya agregado al DOM:

$('gallery-link').observe('click', function(event) {
    click($('gallery-image-0'));
    event.stop();
});

respondido 09 nov., 11:19

Desafortunadamente, hacerlo de esa manera produjo el mismo resultado de cargar una imagen en una nueva ventana. El evento predeterminado aún no se evita. Dicho esto, cambié su código para agregar un registro de consola para firebug, y descubrí que al hacer clic UNA VEZ en la imagen se activa el detector de eventos dos veces, lo que puede ser la razón por la que anula el retorno falso. Desafortunadamente event.stop () dos veces tampoco detiene el evento predeterminado. - colchón yo

Está intentando devolver falso después de que se haya disparado otro evento que tiene su propio conjunto de acciones. Entonces, planeas llamar return false pero antes de que lo hagas, gallery-image-0 responde a tu click() llamada que puede haber provocado que el navegador abra otra página.

¿Tiene sentido? Entonces, necesitas observar click en el elemento de destino y también asegúrese de que termine con return false or event.stop().

respondido 19 nov., 11:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.