【问题标题】:jquery fancybox iframe change the href value dynamicallyjquery fancybox iframe 动态更改 href 值
【发布时间】:2013-04-25 09:18:41
【问题描述】:

我有一个可以单击的按钮,我希望 fancybox 加载任何需要的内容,具体取决于我可以选中的一些复选框。这些复选框将改变需要在fancybox内的iframe中显示的url的值。

到目前为止,我可以让它工作一次,当我再次更改复选框时,我会看到 html 上的 url 发生变化,但fancybox 根本不会弹出。

这是我的按钮和fancybox的链接:

<button type="button" title="Compare" class="button">Compare</button>
<a class="comparefancy" style="display:none;" href="#"></a>

点击按钮时会发生以下情况:

jQuery(document).ready(function() {
        jQuery('.button').click(function(){

            var i=0;
            var prdString="";

            var prdString = jQuery.map(jQuery(':checkbox:checked'), function(n, i){
                  return n.value;
            }).join(',');

            var url='<?php echo Mage::getUrl('catalog/product_compare/index').'items/'; ?>'+ prdString + '/uenc/';

            jQuery('.comparefancy').attr('href', url);//this works all the time
            jQuery('.comparefancy').fancybox();  //this will only work the first time
            jQuery('.comparefancy').trigger('click');



    });

});

我尝试了一些类似答案的 beforeLoad 方法,但它对我不起作用。

编辑:经过更多测试后,我从链接中删除了 display none 并使其可见,然后执行以下操作:

  1. 选中我的复选框,然后单击按钮:第一个 fancybox 加载正常
  2. 选中其他复选框,然后单击按钮:链接将更改其 href 但花式不会加载。
  3. 手动点击链接,然后fancybox加载新的url

那么问题出在我的触发点击功能上吗?什么鬼?

【问题讨论】:

  • 试试 $().triggerHandler('click');或者查看插件,也许点击事件在命名空间中,所以你必须编写类似 .trigger('click.fancy') 的东西。另外,您是否尝试过设置 fancybox 设置,即 iframe preload false 如下所示:stackoverflow.com/questions/11956547/…
  • triggerHandler 没有工作。我试过 beforeLoad 也没有用。
  • 我认为我的问题是这样的:stackoverflow.com/questions/2038071/…

标签: jquery fancybox fancybox-2


【解决方案1】:

也许你实际上并不需要

<a class="comparefancy" style="display:none;" href="#"></a>

但尝试手动触发fancybox,例如:

jQuery(document).ready(function () {
    var i = 0; // inside the click will be always 0 ... to be or not to be
    jQuery('.button').click(function () {
        var prdString = jQuery.map(jQuery(':checkbox:checked'), function (n, i) {
            return n.value;
        }).join(',');
        var url = '<?php echo Mage::getUrl(' catalog / product_compare / index ').' items / '; ?>' + prdString + '/uenc/';

        // open the corresponding URL in fancybox
        jQuery.fancybox(url, {
            // API options
            padding: 0 // example
        });

    });
});

我只是建议fancybox 部分(尽管将i 变量从click 中移出)。确保使用通过.map() 方法传递的参数为每个检查的checkbox 获得预期的url 值。

【讨论】:

    【解决方案2】:

    不要一次又一次地绑定fancybox函数,一次就够了:

    (function($) {
        $(function() { // short for $(document).ready();
            $('.button').click(function() {
                var i = 0,
                    prdString = $.map($(':checkbox:checked'), function(n, i){
                        return n.value;
                    }).join(','),
                    url = '<?php echo Mage::getUrl('catalog/product_compare/index').'items/'; ?>'+ prdString + '/uenc/';
    
                    $('.comparefancy').attr('href', url);
                    setTimeout(function() {
                        $('.comparefancy').click();
                    }, 50);
            });
    
            $('.comparefancy').fancybox({
                // optional settings
            });
        });
    })(jQuery);
    

    【讨论】:

    • 你说得对,这对我来说并不出色,但这并没有解决我的问题,第二次重新选择复选框时,fancybox 将无法加载。
    • 这就是问题所在,它什么也没说。当它第一次加载我看到来自 iframe 的所有获取请求时,第二次它只是忽略了我(虽然锚链接的 url 在 html 中确实发生了变化)
    • hm.. jQuery 版本?花式盒版?您在使用 .click() 或 .trigger('click') 处理程序吗?更改后的 href url 是否正确有效?
    • 嗯,它是fancybox 2,自从它第一次启动后它就按预期工作了。正如您在我的代码中看到的那样,我使用触发点击并且 url 有效,它只是添加了不同的参数。当 url 错误时,我什至没有收到带有“无法加载内容”消息的窗口。 jQuery 是 1.7.1
    • 这很奇怪。你可以尝试使用fancybox 1 进行测试,看看它是否可能是fb2?
    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 2014-03-24
    • 2012-04-15
    • 2012-07-22
    相关资源
    最近更新 更多