2

好吧,我有一个 django 管理站点项目,我想在我的一个 change_form 模板上添加一个简单的对话框。

我添加以下代码:

打开按钮将打开对话框:

<button id='open_dialog' onclick='javascript:$( "#comfirm_dialog" ).dialog("open");'>open</button>

对话框初始化代码:

<script>
(function($){
$( "#comfirm_dialog" ).dialog({
    autoOpen: false,
    height: 450,
    width: 550,
    modal: true,
    buttons: {
        "Add": function(){},
        Cancel: function() {$( this ).dialog( "close" );}
    },
    show: {
      effect: "blind",
      duration: 1000
    },
    hide: {
      effect: "explode",
      duration: 1000
    }
});
})(django.jQuery)

</script>

对话框本身:

<div id='comfirm_dialog' title='Comfirmation'>
    This is a dialog.
</div>

当我单击“打开”按钮时,什么也没发生,只有一个错误:

"Uncaught TypeError: Object #<Object> has no method 'dialog' "

我做了一些研究,发现这可能是由于很多原因。

最常见的一种是我可能在某处包含两次 Jquery。然而,我不认为我做到了。我只声明我在“脚本”标签中使用了“django.jQuery”。

有谁知道我的情况可能是什么原因?

提前致谢。

编辑:对于更新,

我尝试包含'jquery-ui',然后我得到'Uncaught ReferenceError: jQuery is not defined'

然后我尝试包含 jquery(我认为我不应该这样做两次,因为我已经使用过 (django.jQuery)。)我得到了同样的错误“Uncaught TypeError: Object # has no method 'dialog'”

4

4 回答 4

2

使用 Django 2.0.2 解决了以下问题(感谢mrts将其整理出来):

  • 下载 jQuery UI
  • 将文件jquery-ui.{structure}.min.{css,js}jquery-ui.theme.min.css文件夹复制images/static/jquery-ui(或任何其他static目录)
  • 打开jquery-ui.min.js并在文件开头添加以下行:

    jQuery = jQuery || django.jQuery.noConflict(false);

  • 向您的班级添加jscss文件:ModelAdmin Meta

class MyAdmin(admin.ModelAdmin):

    class Media:
        js = (
            'jquery-ui/jquery-ui.min.js',
        )
        css = {
            'all': (
                'jquery-ui/jquery-ui.min.css',
                'jquery-ui/jquery-ui.structure.min.css',
                'jquery-ui/jquery-ui.theme.min.css',
            )
        }

问题的原因是jquery-ui.min.js不知道如何在 Django 中访问 jQuery。通过显式定义jQuery变量,问题得到解决。

于 2018-09-05T20:04:45.280 回答
1

尝试这个:

代替

<button id='open_dialog' onclick='javascript:$( "#comfirm_dialog" ).dialog("open");'>open</button>

<button id='open_dialog'>open</button>

$(function(){
    $('#open_dialog').click(function(){
        $("#comfirm_dialog").dialog('open'); 
    });
})

另外,请确保您已jquery-ui在模板中包含源代码

于 2013-05-23T15:43:01.557 回答
1

我有一个类似的问题,在我的情况下,问题是不同的。

JS 的顺序不同(我知道这是您检查的第一件事,但我几乎可以肯定情况并非如此,但确实如此)。调用对话框的 js 在调用 jqueryUI 库之前被调用。

我正在继承一个模板并使用 {{super.block}} 将代码从块以及模板继承。我不得不在解决问题的块末尾移动 {{super.block}}。调用对话框的 js 是在 Django 的 admin.py 中的 Media 类中声明的。我花了一个多小时才弄清楚。希望这可以帮助某人。

于 2017-09-14T05:02:11.593 回答
0

以下对我有用:

1) 下载最新的稳定版 jQuery UI下载 jQuery UI 1.12.1

2)将上述文件复制到静态资产目录并替换以下行

(function( factory ) {
if ( typeof define === "function" && define.amd ) {

    // AMD. Register as an anonymous module.
    define([ "jquery" ], factory );
} else {

    // Browser globals
    factory( jQuery ); <--- REPLACE HERE ----
}

和:

(function( factory ) {
if ( typeof define === "function" && define.amd ) {

    // AMD. Register as an anonymous module.
    define([ "jquery" ], factory );
} else {

    // Browser globals
    factory( django.jQuery ); <--- REPLACE ----
}

3) 在您的 ModelAdmin 类中添加媒体文件:

    class Media:
    js = (
        'app/js/jquery_ui.js',
        'app/js/custom.js',  
    )
于 2018-07-03T15:13:53.760 回答