2013-04-22 62 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