【问题标题】:('#').dialog is not a function error after using jQuery's .load() function('#').dialog 不是使用 jQuery 的 .load() 函数后的函数错误
【发布时间】:2011-08-02 17:27:47
【问题描述】:

我有以下代码:

<?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() 方法的按钮(尽管应该在文档准备好时调用它)。如果我在单击此试用按钮之前点击了打开对话框按钮,则对话框将正确打开。否则,它会失败并出现以下错误:

$("#mydialog").dialog 不是函数 $("#mydialog").dialog("open");

试用按钮:

<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(){

        });

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

【问题讨论】:

  • 什么是$this?我不知道使用该方法的任何对象。
  • @Rikudo Sennin CJuiDialog 是我正在使用的框架 Yii 提供的一个小部件。它封装了 JUI Dialog 插件。
  • 从这个问题中抽象出你的 PHP。这完全无关紧要。请与我们讨论您的预处理 HTML/JS 输出。
  • @Rikudo:这一个jQuery问题;应该从问题中删除 PHP,而不是从标签中删除 Javascript。
  • 你能给我们看看html吗?具体来说,与#mydialog 相关的#div_wall_messages 在哪里? #mydialog 是否在 #div_wall_messages 中?

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


【解决方案1】:

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

如果你想加载到一个 div 并且你在加载的文件中得到的是一个完整的 HTML 页面(包括&lt;head&gt;&lt;script&gt;s 等),那么你应该只加载的片段您想要进入目标的内容(id)。在所有情况下都避免load()ing HTML 内容包含&lt;script&gt;;根据具体情况,结果要么一无所获,要么毫无意义。

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

【讨论】:

  • 谢谢@bobince!我永远不会自己解决这个问题。是的,displayMessages 是一个操作,它呈现另一个包含脚本的页面。所以这正是发生的事情,我正在替换已经加载的 javascript
【解决方案2】:

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

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

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

【讨论】:

  • 很抱歉拒绝了标签建议。但更深入地研究它,我真的不明白为什么它不应该被标记为 jquery/javascript 问题。不过感谢您的帮助!
【解决方案3】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 2021-09-07
    • 1970-01-01
    相关资源
    最近更新 更多