2013-03-06 40 views
0

我有一个输入元素和它旁边的链接。用户在输入中输入一些文本,然后单击链接进行查询,以查找与输入内容相关的内容。结果应该使用fancybox来显示。这里是我的js代码:为什么fancybox不会在第一次绑定这段代码?

$(".srcaut").click(function() { 
     if($(this).prev("input").val() == '') { 
      alert('Empty field'); 
      return false; 
     } 

     srch = $(this).attr("id").replace("srch-",''); 

     $(this).attr('href',Url+'/'+srch+'/'+$(this).prev("input").val()); 
     $(this).fancybox(); 

    }).prev("input").keypress(function(even) { 
     if(even.keyCode == 13) { 
      $(this).next('.srcaut').click(); 
      return false; 
     } 

}); 

不过的fancybox不显示的第一次用户输入一些文字,然后点击链接或打加载页面后“Enter”键。但之后是有效的。

问题是什么。似乎fancybox不绑定链接在第一时间,但为什么?

+0

是您第一次打电话的点击功能吗? – 2013-03-06 07:54:58

+0

当用户点击链接或点击“Enter”键时调用它。 – 2013-03-06 07:58:16

+0

控制台中的任何东西?这样做时你会得到什么:'console.log(Url +'/'+ srch +'/'+ $(this).prev(“input”)。val());' – qwerty 2013-03-06 08:02:15

回答

4

一个链接调用.fancybox()不会显示花哨的框,它只会准备链接被点击时显示一个奇特的盒子。这就是为什么它只能在click处理程序中准备好花式框的第二次。

加载文档时,您可能需要在链接上调用.fancybox(),但这引发了使用根据input的内容动态构建的链接的问题。您可能需要尝试在inputblur事件中构建链接。

如何防止显示它在if条件内点击 事件链接?

在致电.fancybox(),你可以注册一个click处理程序,将stop event propagation如果input是空的,请参阅http://jsbin.com/exomad/3

+0

谢谢ybo,当我在页面加载时绑定在链接上时,它工作正常。但问题是当输入是空的,用户点击链接。那时我不想显示fancybox,但通过绑定文档加载时间显示,所以我认为把它放在点击事件。 – 2013-03-06 08:19:07

+0

如何防止在链接的点击事件中的if条件中显示它? – 2013-03-06 08:20:00

+0

新增了第二个问题的答案 – ybo 2013-03-06 08:37:15

1

例如我张贴这对其他谁面临类似的问题..

在我的情况,我不得不

$('#addvideos').on("click",function(){ 
    $(".modal").fancybox(fancybox_default); 
}); 

fancybox_default < - 商店花哨的盒子形状{高度,宽度}

addvideos < - 指向一个URL元素

所以在我的情况下,当我点击的URL但之后工程的配置不会加载的第一次。 (我的意思是它的作品(它显示弹出),但它不会加载弹出窗口的高度和宽度)

我不得不添加var trash = $(“。modal”)。fancybox(fancybox_default); < - 在点击处理程序之前... //仅加载该物件并保存在变量中...

和它的工作对我来说:-)

0

我能够动态生成的锚标记结合的Click事件之前初始化的fancybox(我想它可以工作,即使你初始化之前调用)

来解决这个
$('#a_email' + resultId).fancybox({ 
        //jq('#a_email' + resultId).fancybox({    
        'width': '45%', 
        'height': '55%', 
        'autoScale': true, 
        'scrolling': 'no', 
        'transitionIn': 'fade', 
        'transitionOut': 'fade', 
        'type': 'iframe' 
       }); 

,然后调用的fancybox直接

$.fancybox({       
         'width': '45%', 
         'height': '55%', 
         'autoScale': true, 
         'scrolling': 'no', 
         'transitionIn': 'fade', 
         'transitionOut': 'fade', 
         'type': 'iframe', 
         'href': url 
        }); 

有什么想法?

相关问题