2012-04-02 290 views
2

这可能非常简单 - 但我正在努力发现正在发生的事情。jquery点击事件 - 需要点击两次才能触发

在JS小提琴: http://jsfiddle.net/3hHAX/

有两个链接输出到 '打开视频模式'。

由于链接文字暗示这两个链接应该打开包含youtube视频的模型弹出窗口。

这是使用prettyphoto库从:http://www.no-margin-for-errors.com/projects/prettyphoto-jquery-lightbox-clone/

出于某种原因,Click事件不会在第一次点击触发。 但在第二。

(未包含CSS,因此看起来不太模态,但至少在演示中您会看到内容加载到下面)。

任何人都可以建议发生了什么问题吗?

感谢,

史蒂夫

回答

1

谢谢你们,

这两种看法帮我彻底解决它。在更新后的jsfiddle

端到端的解决方案:

http://jsfiddle.net/3hHAX/6/

似乎prettyPhoto重视它自己的点击事件,只是需要将这些DOM元素。

谢谢你,史蒂夫

4

触发初始化之后,只允许它被初始化一次click事件。

(function($) {  
    $(".watch-this a, .field-name-field-embed-code a").live('click',function(){ 
     if (!$(this).is(".pPhoto")) { 
      $(this).prettyPhoto({ 
       social_tools: '' 
      }).addClass("pPhoto").click();  
     } 
     return false;  
    }); 
})(jQuery); 

演示:http://jsfiddle.net/3hHAX/3/

编辑澄清:
这是初始化动态元素插件的一个非常普遍的方式。如上所述,如果你的元素不是动态的,最好在dom准备好初始化。

注:
.live折旧,你真的应该使用.on

(function($) {  
    $(document).on("click",".watch-this a, .field-name-field-embed-code a",function(){ 
     if (!$(this).is(".pPhoto")) { 
      $(this).prettyPhoto({ 
       social_tools: '' 
      }).addClass("pPhoto").click();  
     } 
     return false;  
    }); 
})(jQuery); 
0
  • 首先,从来没有使用实时方法jQuery中除了在情况下的DOM真的是出你的控制权。至少你应该使用委托功能,因为实时功能会导致很多放缓和很多麻烦(尽管这一次没有出错)
  • 其次,点击事件确实会触发见here,但漂亮的照片组件不是第一次工作,因为我不知道的原因,但正如你可以看到在前面的jsfiddle链接确实第一次使用警报时,你点击,所以它听起来像我把它当作漂亮照片脚本中的一个bug(Kevin B似乎通过触发第二次单击事件来解决这个问题)。
+0

“对”现在使用的,而不是“.live”,如果该元素是动态加载,然后使用“对”时,‘DOM’不应该在你的控制。不确定你的意思是什么意思。 – 2013-11-26 16:54:57