2013-04-22 102 views
0

我有一個相當大的項目,我們試圖從jQuery UI對話框遷移到Fancybox。fancybox與yii/ajax鏈接問題

在過去的邏輯是這樣......

<a onclick="functionthatcreatesdialog()">Link</a> 
... 
function functionthatcreatesdialog() { 
    $('#dialog').dialog({options}).dialog('open'); 
} 

的fancybox的工作方式有些不同,根據API文檔,這些都是我的企圖;我想拉一個AJAX頁面:

<a id="startimport" 
href="<?=Yii::app()->baseUrl;?>/index-dev.php/products/uploadCsvToServer"> 
Import from file</a> 

後來就......

$(document).ready(function() { 
    $('#startimport').fancybox({someoptions}); 
    return false; 
}); 

onclick=""直接嘗試:

<a id="startimport" 
href="<?=Yii::app()->baseUrl;?>/index-dev.php/products/uploadCsvToServer" 
onclick="$('#startimport').fancybox();"> 
Import from file</a> 

然而,沒有任何作品!我也嘗試了其他組合。沒有。

Chrome的控制檯沒有工作,我認爲腳本可能沒有正確加載,但它是。

$('#startimport').fancybox返回:

function (options) { 
     var index, 
      that  = $(this), 
      selector = this.selector || '', 
      run  = function(e) { 
       var what = $(this).blur(), idx = index, relType, relVal; 

       if (!(e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) && !what.is('.fancybox-wrap')) { 
        relType = options.groupAttr || 'data-fancybox-group'; 
        relVal = what.attr(relType); 

        if (!relVal) { 
         relType = 'rel'; 
         relVal = what.get(0)[ relType ]; 
        } 

        if (relVal && relVal !== '' && relVal !== 'nofollow') { 
         what = selector.length ? $(selector) : that; 
         what = what.filter('[' + relType + '="' + relVal + '"]'); 
         idx = what.index(this); 
        } 

        options.index = idx; 

        // Stop an event from bubbling if everything is fine 
        if (F.open(what, options) !== false) { 
         e.preventDefault(); 
        } 
       } 
      }; 

     options = options || {}; 
     index = options.index || 0; 

     if (!selector || options.live === false) { 
      that.unbind('click.fb-start').bind('click.fb-start', run); 

     } else { 
      D.undelegate(selector, 'click.fb-start').delegate(selector + ":not('.fancybox-item, .fancybox-nav')", 'click.fb-start', run); 
     } 

     this.filter('[data-fancybox-start=1]').trigger('click'); 

     return this; 
    } 

任何幫助,將不勝感激。我試圖尋找解決方案,但沒有任何我試圖幫助。 我使用Yii框架順便說一句。

+0

你確定'fancybox'&'jQuery'被加載嗎?點擊鏈接時,你在控制檯中是否有任何錯誤?您的鏈接是否有效? – 2013-04-22 13:48:34

+0

我的鏈接工作,無論是jQuery和Fancybox都肯定加載(我在頁面中的其他地方使用jQuery,查詢一個元素的.fancybox屬性),是的,我的鏈接(否則)工作,併發送給我的AJAX頁面 – casraf 2013-04-22 13:54:20

+0

fancybox是否顯示空白彈出窗口或什麼都沒有發生? – 2013-04-22 13:59:40

回答

1

首先,確保你加載了fancybox js和css文件(在jQuery之後)。

然後,這個網站的鏈接:

<a id="startimport" href="<?=Yii::app()->baseUrl;?>/index-dev.php/products/uploadCsvToServer">Import from file</a> 

嘗試:

$(document).ready(function() { 
    $("#startimport").fancybox({ 
     type: 'ajax' 
    }); 
}); 

...(你不需要return false;)。

如果您想要在fancybox中打開多個鏈接,則可能需要切換到類而不是ID。

注意:ajax請求受制於same origin policy

如果您正在使用的fancybox V2.X記住,如果的fancybox不能得到內容type,它會嘗試基礎上,href猜測,如果不成功就會失敗默默(這是從以前的不同版本ajax被用作默認type並顯示錯誤消息)。

+0

就是這樣,謝謝! – casraf 2013-04-23 08:55:45