2

这可能非常简单——但我很难发现发生了什么。

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

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

正如链接文本所暗示的,这两个链接应该打开一个模型弹出窗口,其中包含 youtube 视频。

这是使用来自: http ://www.no-margin-for-errors.com/projects/prettyphoto-jquery-lightbox-clone/ 的漂亮照片库

由于某种原因,单击事件不会在第一次单击时触发。但在第二个工作。

(没有包含 CSS,所以看起来不是很模态,但至少出于演示的目的,您会在下面看到内容加载)。

谁能建议出了什么问题?

谢谢,

史蒂夫

4

3 回答 3

5

初始化后触发点击事件,只允许初始化一次。

(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);
于 2012-04-02T21:41:55.370 回答
1

多谢你们,

两种回答都帮助我最终解决了这个问题。

在更新的 JSFiddle 中结束解决方案:

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

似乎 prettyPhoto 在点击事件上附加了它自己的,并且只需要应用于那些 dom 元素。

谢谢,史蒂夫

于 2012-04-03T12:53:57.617 回答
0
  • 首先,永远不要在 jquery 中使用 live 方法,除非在 dom 确实超出您的控制范围的情况下。至少你应该使用委托函数,因为实时函数会导致很多减速和很多麻烦(尽管这次没有错)
  • 其次,单击事件确实会触发,正如您在此处看到的那样,但是由于我不知道的原因,prettyPhotos 组件第一次无法正常工作,但是正如您在之前的 jsfiddle 链接中看到的那样,它确实在第一次使用警报时工作在你点击周围,所以在我看来,这听起来像是 prettyphotos 脚本中的一个错误(Kevin B 似乎通过触发第二次点击事件巧妙地解决了这个问题。)。
于 2012-04-02T21:56:20.317 回答