('#')。使用jQuery的.load()函数后,dialog不是函数错误

时间:2011-08-02 17:27:48

标签: javascript jquery-ui jquery-dialog jquery-load

我有以下代码:

<?php
$this->beginWidget('zii.widgets.jui.CJuiDialog', array(
    'id'=>'mydialog',
    // additional javascript options for the dialog plugin
    'options'=>array(
        'title'=>'Confirmar',
        'resizable'=>'false',
        'autoOpen'=>false,
        'modal'=>true,      
        'buttons'=>array('Eliminar'=>'js:function(){deleteMessage();$(this).dialog("close");}',
                         'Cancelar'=>'js:function(){$(this).dialog("close");}',),
    ),
));?>
<div style="display:none">Do you confirm you want to delete the item?</div> 
<?php 
$this->endWidget('zii.widgets.jui.CJuiDialog');
?>

<input type="button" onclick="js:openDlg()" value="Open the dialog">
<script language="javascript" type="text/javascript">
    function openDlg(){
        $("#mydialog").dialog("open"); 
    }
</script>

这完全有效,直到我需要调用jQuery的.load()函数。出于测试目的,我有一个调用.load()方法的按钮(尽管据说应该在doc准备好时调用它)。如果在单击此试用按钮之前单击打开的对话框按钮,则会正确打开该对话框。否则,它会因以下错误而失败:

$(“#mydialog”)。对话框不是一个功能 $( “#mydialog”)对话框( “开放”)。

试用按钮:

<input type="button" onclick="js:load_wall()" value="Load Messages">
function load_wall(){
        var liga = $("#liga_id").val();
        $('#div_wall_messages').load('displayMessages',{liga_id: liga}, function(){

        });

拜托,欢迎任何帮助。这个错误让我发疯。谢谢!!

3 个答案:

答案 0 :(得分:2)

什么是displayMessages?它是一个包含脚本的页面吗?它是一个包含另一个jQuery副本的页面吗?如果你包含jQuery的第二个副本,你将覆盖你现有的副本 - 可能你正在覆盖一个装有Dialog插件的jQuery,而新的一个没有。

如果你想加载到div中,你加载的文件中的内容是HTML的整页(包括<head><script> s等),那么你应该只将您想要的内容片段(按id)加载到目标中。在所有情况下,请避免load()包含<script>的HTML内容;根据具体情况,结果是什么都没有,或者没什么明智的。

上面的所有代码中js:都没有做任何事情,应该省略。

答案 1 :(得分:1)

如果加载是问题,则可能是您已加载(并覆盖)当前加载的库,其中可能包含带有对话框插件的jQuery。确保加载一个干净的页面,(每当我使用AJAX时,我通常只生成一个<div><ul>,无论我需要什么,而不是整个网页。

如果失败,请确保包含正确的javascript文件,包括jQuery和jQuery UI。

检查浏览器的网络/资源跟踪这些脚本文件的内容,并查看javascript文件中是否还有其他错误消息(可能是404未找到?)。

答案 2 :(得分:0)

如上所述,您可能会覆盖库。

处理它的一种方法是确保加载正确的文件。

另一种方法是在对话框和对话框中的内容之间插入iframe。浏览器将iframe视为具有自己脚本的单独页面。因此,内容“在iframe之上”的脚本将与“iframe”下面的对话框的脚本分开。

由于您使用的是Yii,请检查此wiki