`

jquery_dialog控件

 
阅读更多
/**
 * @requires jquery, EasyUI 1.2.6+
 *
 * 此方法是对 EasyUI.window 和 EasyUI.dialog 的扩展
 * 可以实现如下功能:
 * 1、使用框架页面时可以控制窗口是否跨框架弹出在框架最顶层页面,还是框架内当前页面。默认框架最顶层页面
 * 2、可以控制url加载页面方式,是使用默认方式,还是iframe加载, 默认iframe加载
 * 3、使用iframe加载页面时,可以实现父页面向子页面传递javaScript对象
 * 4、使用iframe加载页面时,可以订制iframe onLoad事件
 * 5、扩展content属性,自动识别是静态文本内容,还是加载页面
 * 6、通过赋值ID属性,控制弹出窗体唯一性
 * 7、toolbar、buttons中定义按钮的handler属性,支持弹出窗体iframe中方法调用。
 * 8、弹出窗体关闭方式更灵活
 *
 *
 * @author zhaojh<zjh527@163.com>
 * @date 2012.11.15
 *
 */
(function($){
    $.namespace('windows');

    /**
     * 普通窗体
     *
     * 新增属性说明如下
     * @param isFrame	是否开启使用iframe加载给定url页面, 此属性设置为true时则开启使用iframe加载页面。 值:true|false,  默认值true
     * @param self		用于框架页面,如果值为true则不跨框架,否则跨框架弹出在框架最顶层页面。 值:true|false,	默认值false
     * @param data		用于在使用iframe加载给定页面时,父页面给子页面传递数据。	默认值null
     *
     * 扩展属性说明如下
     * @param onLoad	当使用iframe加载给定url页面时,在iframe加载完成后调用。
     * 					默认接收一个参数对象,参数对象属性说明参见下面toolbar、buttons说明第2项。
     * @param content	可根据内容前缀关键字'url:',来判断是显示静态文本还是加载页面。
     * @param id		此属性用来标识弹出窗体的唯一性,不再用来充当panel的id属性
     *
     * 特殊属性说明如下
     * this.content		iframe方式加载内容页的window对象。 用于onLoad方法中的调用
     *
     *
     * toolbar、buttons	属性定义按钮handler属性扩展说明如下
     * 1、当handler 被赋值字符串时,表示调用弹出窗体iframe中已有的与字符串值同名的方法
     * 2、被调用方法默认接收一个参数对象,对象属性如下:
     *   data: 类型:Object,是对windows.open方法参数data的引用
     *   close: 类型:Function,用来关闭弹出窗体
     *
     *
     *
     *
     * 注:其他属性请参考EasyUI API文档。
     *
     */
    windows.open = function(opts){
        var win;
        var defaults = {
            width: 500,
            height: 400,
            modal: true, // 定义是否将窗体显示为模式化窗口
            draggable:false, // 定义是否能够拖拽窗口
            collapsible:false, // 定义是否显示可折叠按钮
            maximizable:false, // 定义是否显示最大化按钮
            minimizable: false, // 定义是否显示最小化按钮
            resizable: false, // 定义是否能够改变窗口大小
            isFrame: true, //是否使用iframe
            self: false, //用于框架页面,如果值为true则不跨框架,否则跨框架弹出在框架最顶层页面
            content: '', // 请求内容,可以是一个网页地址,也可以是html内容
            onLoad: null,
            onDestroyWin:null,
            onClose: function(){
                onAction();
                win.dialog('destroy');
            }
        };

        var options = $.extend({}, defaults, opts);

        //取顶层页面
        var _doc, _top = (function(w){
            try{
                _doc = w['top'].document;
                _doc.getElementsByTagName;
            }catch(e){
                _doc = w.document;
                return w;
            }

            if(options.self || _doc.getElementsByTagName('frameset').length >0){
                _doc = w.document;
                return w;
            }

            return w['top'];
        })(window);


        //如填写ID属性,则窗体唯一
        var winId;
        if(options.id){
            winId = options.id;
            delete options.id;

            //检查创建窗口是否已经存在,存在则不在创建
            if($('#'+winId).length>0){
                return;
            }
        }

        //检查content内容是静态文本,还是url地址
        var isUrl = /^url:/.test(options.content);
        if(isUrl){
            var url = options.content.substr(4, options.content.length);
            //构建iframe加载方式
            if(options.isFrame){
                var iframe = $('<iframe></iframe>')
                    .attr('height', '100%')
                    .attr('width', '100%')
                    .attr('marginheight', '0')
                    .attr('marginwidth', '0')
                    .attr('frameborder','0').attr('src', url);

                var onAction = function(){
                    var action = "";
                    try{
                        var resData = _this.content.GetData();
                        if(isEmptyObject(resData)){ // 为空则取消
                            action = "cencal";
                        } else {
                            action = "ok";
                        }
                        options.onDestroyWin.call(_this, action);
                    } catch(e) {
                        var ermsg = e.message.indexOf("GetData") != -1 ? "子窗口没有定义GetData脚本函数,请定义!" : e;
                        $.messager.alert("错误提示", ermsg, "error");
                    }
                }

                var _this = this;
                var frameOnLoad = function(){
                    _this.content = iframe.get(0).contentWindow;
                    options.onLoad && options.onLoad.call(_this,{
                        close: function() {
                            win.dialog('close');
                        }
                    });
                }

                delete options.content;
            }else{//使用默认页面加载方式
                options.href = url;
            }
        }

        //加工toolbar和buttons中定义的handler方法,使其可以接收给定参数,用于iframe方式下的父子页面传值和窗口关闭
        /*var warpHandler = function(handler){
         var args = {data: options.data, close: function(){win.dialog('close')}};
         if(typeof handler =='function'){
         return function(){
         handler(args);
         }
         }

         if(typeof handler == 'string' && options.isFrame){
         return function(){
         iframe.get(0).contentWindow[handler](args);
         }
         }
         }

         //处理toolbar数组事件定义,选择器形式不做处理
         if(options.toolbar && $.isArray(options.toolbar)){
         for(var i in options.toolbar){
         options.toolbar[i].handler = warpHandler(options.toolbar[i].handler);
         }
         }

         //处理buttons数组事件定义,选择器形式不做处理
         if(options.buttons && $.isArray(options.buttons)){
         for(var i in options.buttons){
         options.buttons[i].handler = warpHandler(options.buttons[i].handler);
         }
         }*/

        if(options.isFrame && iframe){
            iframe.bind('load', frameOnLoad);
            try {
                win = _top.$('<div>', {id: winId}).append(iframe).dialog(options);
            } catch (e){
                win = $('<div>', {id: winId}).append(iframe).appendTo("body").dialog(options);
            }
        }else{
            win = _top.$('<div>', {id: winId}).dialog(options);
        }
    }

    windows.getIFrameEl = function(){
        return this;
    }


    /**
     * 模式窗体
     * 参数说明请看windows.open
     */
    windows.showModalDialog = function(opts){
        var defaults = $.extend(
            {},
            opts,
            {
                modal: true,
                minimizable: false,
                maximizable: false,
                resizable: false,
                collapsible: false
            }
        );
        windows.open(defaults);
    }
})(jQuery)

 

(function($){
    $.extend({
        namespace: function(ns){
            if(typeof ns != 'string'){
                throw new Error('namespace must be a string');
            }

            var ns_arr = ns.split('.');
            var parent = window;
            for(var i in ns_arr){
                parent[ns_arr[i]] = parent[ns_arr[i]] || {};
                parent = parent[ns_arr[i]];
            }
        }
    });
})(jQuery)

 

分享到:
评论

相关推荐

    jquery.dialog控件

    **jQuery Dialog 控件详解** jQuery Dialog 是 jQuery UI 库中的一个核心组件,它提供了一种在网页上创建可自定义的对话框(弹窗)的方法。这个控件用于展示信息、提示用户输入或者进行交互操作,是网页界面设计中...

    jquery_and_jquery_ui_reference_1.2

    1. **对话框(Dialog)**: 可以创建模态或非模态对话框,提供关闭按钮、拖动和缩放等功能。 2. **可排序(Sortable)**: 让列表项可以拖放排序,常用于表格或列表。 3. **可拖放(Draggable)**: 将元素转化为可...

    Jquery_ui的dialog使用文档概述

    ### Jquery UI 的 Dialog 使用详解 #### 概述 Jquery UI 的 `Dialog` 是一个非常实用且功能丰富的用户界面组件,它可以帮助开发者快速创建一个浮动的窗口,该窗口包括标题和内容两个主要部分。此外,`Dialog` 组件...

    jQuery_EasyUI_jc.rar_JQ_easyui_jquery_jquery easyui

    jQuery EasyUI 是一个基于 jQuery 的前端开发框架,它简化了网页用户界面的创建,提供了丰富的组件和主题,如对话框、表格、菜单、按钮、树形控件等。这个名为 "jc.rar" 的压缩包文件显然包含了关于 jQuery EasyUI ...

    jQuery_LigerUI_V1.2.2

    《jQuery_LigerUI_V1.2.2:深入解析与实战指南》 jQuery_LigerUI 是一个基于 jQuery 的前端UI库,专为构建用户界面而设计。版本V1.2.2代表了该库的一个稳定版本,包含了丰富的功能和优化。在本篇文章中,我们将深入...

    jquery_easyUI_demo

    EasyUI提供了多种表单控件,如文本框、下拉框、复选框等,以及表单验证机制。在示例中,你可以看到如何创建动态表单,以及如何处理表单提交和验证事件。 菜单(Menu)是导航系统的关键组件,它可以为用户提供清晰的...

    jquery_UI最新版本文件_PC端

    - **Dialog(对话框)**:允许在网页上创建弹出式窗口,常用于警告、确认或提供详细信息。 - **DatePicker(日期选择器)**:为输入字段添加了一个方便的下拉日历,用户可以轻松地选择日期。 - **Draggable and ...

    jQuery插件 dialog

    jQuery 插件 dialog 是一个广泛使用的弹出窗口控件,它极大地丰富了网页交互体验,提供了灵活、可定制的对话框功能。这个插件基于 jQuery UI 库,它继承了 jQuery 的简洁API,并且增加了丰富的界面元素和交互设计。...

    jQuery Dialog 弹出层对话框插件(可加载url地址)

    **jQuery Dialog弹出层对话框插件:深入解析与应用** jQuery Dialog是jQuery UI库中的一个组件,它提供了一种优雅的方式在网页上创建交互式的弹出层对话框。这个插件不仅允许用户展示信息,还可以加载外部URL内容,...

    jquery-ui控件

    jQuery UI 包含了一系列的可定制的、易于使用的控件,如日期选择器、滑块、对话框等,大大简化了前端开发工作。 **jQuery UI 控件** 1. **日期选择器(Datepicker)**:jQuery UI 提供了一个强大的日期选择器插件...

    jquery_最新打包版

    例如,通过`$("#dialog").dialog()`,我们可以轻松创建一个可交互的对话框。jQuery UI的拖放功能也是其一大亮点,允许用户自由移动页面上的元素,提升用户体验。 最后,jQuery Mobile 1.4.5是专为移动设备设计的...

    jquery_easyui_demo1.rar

    - **树形控件(tree)**:展示层级关系的数据。 - **下拉选择器(combobox)**:提供下拉列表供用户选择。 - **滑块(slider)**:用于数值选择或进度条显示。 **3. 使用步骤:** - 引入库文件:添加jQuery和...

    jQuery_easyUI学习

    1. **对话框(Dialog)**:用于显示独立的窗口,可以用来展示信息、确认操作或进行多步骤流程。在示例中,你可能会看到如何创建、打开和关闭对话框,以及如何设置其大小、位置和可拖动/可缩放属性。 2. **表格(Table)...

    jQuery_EasyUIjiaocheng.rar_ASP easyui

    - **其他组件**:还包括对话框(Dialog)、进度条(ProgressBar)、树(Tree)、面板(Panel)等,丰富了页面功能。 3. **主题和定制**:EasyUI 自带多种预设主题,同时也支持自定义样式,以满足个性化需求。 4. ...

    jquery_easyui离线网页教程_2019最新.zip

    1. **对话框(Dialog)**:EasyUI提供了弹出式对话框,可以用来显示信息、获取用户输入或进行其他交互。通过简单的配置,可以实现模态和非模态对话框,以及自定义大小和位置。 2. **表格(Grid)**:表格组件支持数据...

    jquery_easyui_整理

    - 表单(form):提供了一套完整的表单控件,如文本框、下拉框、日期选择器等,以及表单验证机制。 - 对话框(dialog):用于展示弹出式窗口,常用于用户确认、信息提示或表单编辑。 - 菜单(menu):创建可折叠...

    jquery_easy_ui学习资料

    6. **Dialog(对话框)**:类似Window,但通常用于临时显示信息或进行确认操作。 7. **Form(表单)**:提供表单控件,如文本框、下拉框、复选框等,支持数据验证和提交。 8. **DataGrid(数据网格)**:用于展示...

    jquery_easyui_中文解析

    EasyUI 提供了丰富的表单控件,如文本框、复选框、单选按钮、下拉选择框等,并支持表单验证。例如: ```html [5,10]" label="用户名"&gt; 密码"&gt; ``` ### 3. 事件处理和API jQuery EasyUI 提供了丰富的...

    jQuery_EasyUI_API.rar_jquery-easyui api

    - **Tree(树形控件)**:加载、操作树结构数据,处理节点的展开、收缩、选择等事件。 - **Accordion(折叠面板)**:组织内容,允许用户逐步查看或隐藏信息。 - **Slider(滑块)**:创建滑动选择器,设置范围,...

    Jquery_easyui_datagrid_js导出excel.doc

    jQuery EasyUI是一个基于jQuery的UI框架,它提供了一系列的用户界面组件,如DataGrid、TreeGrid、Dialog等,简化了Web前端的开发工作。其中,DataGrid组件是一种用于展示和操作表格数据的控件,支持排序、分页、筛选...

Global site tag (gtag.js) - Google Analytics