2009-06-28 70 views
2

嘿家伙..快速的问题:Javascript双击元素

我写了一个简单的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

认为发生了什么事情是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(); 
} 

这样,你可以打电话给你的DOM内部hookAnchors更改代码(作为$.get例如结果)。

+0

看看那个 - 像魅力一样工作!我不知道lightbox是否自己点击了点击。 如果我不是一个人,我会说我爱你! 是啊...我之前有过整个图片库,但由于书签问题等原因,我改变了它 - 这就是为什么我仍然有live()函数的原因。 非常感谢 - 太棒了! – BraedenP 2009-06-28 06:42:51