0

クリックするボタンがあり、チェックできるチェックボックスに応じて、必要なコンテンツをファンシーボックスにロードします。これらのチェックボックスは、fancybox 内の iframe に表示する必要がある URL の値を変更します。

チェックボックスを再度変更すると、HTMLでURLが変更されますが、ファンシーボックスはまったくポップしません。

これが私のボタンとファンシーボックスへのリンクです:

<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 メソッドを試しましたが、うまくいきませんでした。

編集:これをさらにテストした後、リンクから表示なしを削除して表示し、次のことを行いました:

  1. チェックボックスをオンにしてからボタンをクリックしました:最初のファンシーボックスは問題なくロードされます
  2. 他のチェックボックスをオンにしてからボタンをクリックしました。リンクはhrefを変更しますが、ファンシーはロードされません.
  3. リンクを手動でクリックすると、fancybox が新しい URL を読み込みます

それで、問題は私のトリガークリック機能ですか?え?

4

2 に答える 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
        });

    });
});

ファンシーボックスの部分のみを提案しているだけです(ただし、i変数を外に移動しましclickた)。メソッドを介して渡されたパラメーターを使用して、urlチェックごとに期待される値を取得していることを確認してください。checkbox.map()

于 2013-04-25T16:25:28.107 に答える
0

fancybox 関数を何度もバインドしないでください。1 回で十分です。

(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);
于 2013-04-25T09:25:35.597 に答える