2009-06-28 2 views
2

Эй, ребята .. Быстрый вопрос:Javascript Double-Click Element

Я написал простой JS, который открывает Lightbox для просмотра изображений, когда ссылка на изображение кнопки. В основном, используя jQuery (да, я был ленив), я обнаруживаю щелчок привязанного тега, использую регулярное выражение, чтобы убедиться, что атрибут HREF принадлежит файлу изображения, а если он есть, он открывает изображение в lightBox. Все работает отлично, кроме одного: для привязки требуется два клика, прежде чем он откроет lightBox. Почему это?

Вот сценарий я написал:

$(document).ready(function(){ 
    var href; 
    var imageExtensions = /(.)+(.jpg)|(.png)|(.gif)|(.bmp)/; 
    //On click of any link 
    $("a").live("click",function(event){ 
     href = $(this).attr("href"); 
     //If the target URL is an image, use lightbox to open it 
      if(imageExtensions.test(href)){ 
       event.preventDefault(); 
       $(this).attr("class","lightboxIMG"); 
       //Prevent the link from opening, and open lightbox 
       $(".lightboxIMG").lightBox(); 
       $(this).attr("class",""); 
      } 
    }); 
//END 
}); 

Я не вижу, что может быть причиной пользователю нужно нажать дважды, чтобы активировать осветителя. Если вам нужен образец, чтобы увидеть, что я имею в виду, я в настоящее время использую скрипт в бета-версии моего нового сайта: http://ctrlshiftcreate.com/photography.php?photo=6&r_folder=

Нажмите «Просмотреть полный размер», чтобы посмотреть, что я имею в виду. Я бы очень признателен за любую помощь - большое спасибо!

ответ

4

I что происходит, звонок lightbox() только устанавливает якорь, чтобы быть лайтболом, на самом деле он не показывает лайтбокс. Итак, первый щелчок говорит лайтбокс «сделать это лайтбоксом», а второй щелчок поймается лайтбокс и на самом деле показывает лайтбокс.

Редактировать Важный аспект этого аспекта? Или вы планируете добавлять дополнительные ссылки, которые нужно будет захватить после загрузки документа? Если жить не важно, стандартный метод lightBox() должен быть достаточно хорош, чтобы ловить клики. Если это так, я бы подумал о написании метода стиля hookAnchors(), который вы можете вызвать после ajaxing, который просто вызывает lightBox(). Что-то вроде:

$(document).ready(function() { 
    hookAchors(); 
}); 

function hookAnchors() { 
    var imageExtensions = /(.)+(.jpg)|(.png)|(.gif)|(.bmp)/; 
    $('a') 
     .filter(function() { 
      return imageExtensions.test($(this).attr("href")) 
     }) 
     .lightBox(); 
} 

Таким образом, вы можете вызвать hookAnchors внутри вашего DOM изменяя код (в результате $.get, например).

+0

Посмотрите на это - работали как шарм! Я не знал, что лайтбокс поймал щелчок по своему усмотрению. Если бы я не был парнем, я бы сказал, что люблю тебя! И да ... У меня была вся галерея изображений, ранее работавшая с AJAX, но из-за проблем с закладкой и т. Д. Я изменил ее - вот почему у меня все еще есть функция live(). Большое спасибо - это здорово! – BraedenP

+0

lol, не беспокойтесь, рад, что это помогло :-) –