вернуть ложь в HTML-якорь не возвращает ложь - PullRequest
0 голосов
/ 08 ноября 2011

Я пытаюсь исправить незначительную ошибку в моем JavaScript-ящике лайтбокса, сохраняя при этом редактирование как можно более незаметным.

Пример страницы: http://www.mattressonline.co.uk/Product/Silentnight-Miracoil-3-Gold-Label-Limited-Edition-Mattress-P43

Проблема связана с основным изображением продукта. Если вы нажмете на одну из двух миниатюр, изображения загрузятся в лайтбокс, как и ожидалось. Щелчок по большому изображению вызывает событие, которое щелкает по изображению галереи, и вы можете видеть, что лайтбокс начинает всплывать, но затем запускается событие по умолчанию для тега , и изображение загружается в отдельное окно. Это не должно происходить , так как ссылка использует 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>

Кроме того, это довольно простая установка прототипа / scriptaculous / lightbox2.

Есть идеи, почему return false не возвращает false? Это невероятно расстраивает.

Редактировать: IE6 и 8 возвращают false, как сказано. Текущие FF, Chrome и IE9 нет.

Ответы [ 2 ]

1 голос
/ 19 ноября 2011

Вы пытаетесь вернуть false после того, как было запущено другое событие, которое имеет свой собственный набор действий.Итак, вы планируете звонить return false, но перед этим gallery-image-0 отвечает на ваш click() звонок, который, возможно, уже заставил браузер открыть другую страницу.

Имеет ли это смысл?Итак, вам нужно наблюдать click на целевом элементе, а также убедиться, что он заканчивается на return false или event.stop().

1 голос
/ 09 ноября 2011

Ненавязчивый сценарий обычно означает не использование встроенных атрибутов. В настоящее время рекомендуется подключать слушателей после добавления элемента в DOM:

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