天天看點

bootstrap weebox,支援ajax的模态彈出框(1)

本篇介紹的bootstrap weebox(支援ajax的模态彈出框),曆經多次修改,目前版本已經穩定,整合了bootstrap的響應式,界面簡單,功能卻無比豐富,支援ajax、圖檔預覽等等。

bootstrap提供了原生的模态框,但是功能很雞肋,食之無味棄之可惜,滿足不了大衆的彈出框需求,其主要缺點是不支援在模态框上彈出新的模态框,這很無趣。為了解決這個痛點,我特地研究了一個叫weebox的插件,這個原生的模态彈出框也不怎麼樣,使用起來有很多bug,尤其是不支援響應式。為了解決這兩個痛點,結合我的項目,特地整理出新的bootstrap weebox彈出框,支援響應式。

一、材料準備

bootstrap weebox

我把源碼放在了git上,友善大家下載下傳。

二、效果圖(彈出loading,加載頁面,确認後彈出error消息)

bootstrap weebox,支援ajax的模态彈出框(1)
bootstrap weebox,支援ajax的模态彈出框(1)
bootstrap weebox,支援ajax的模态彈出框(1)

三、執行個體講解

①、加載資源

<!DOCTYPE html>
<html lang="zh-CN">
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ include file="/components/common/taglib.jsp"%>

<head>
<title>雲夢-項目回報設定</title>
<link type="text/css" rel="stylesheet" href="${ctx}/components/weebox/css/weebox.css" />
<script type="text/javascript" src="${ctx}/components/weebox/js/bgiframe.js"></script>
<script type="text/javascript" src="${ctx}/components/weebox/js/weebox.js"></script>
</head>
<body>
<div class="btn-toolbar" role="toolbar">
    <div class="btn-group">
        <a href="${ctx}/deal/initAem/${id}" target="dialog" class="btn btn-primary" focus="type" width="600">
            <span class="icon-plus"></span>
            <span>新增項目回報</span>
        </a>
    </div>
</div>
<script type="text/javascript">
<!--
    $(function() {
        $("a[target=dialog]").ajaxTodialog();
    });
$.fn.extend({
        ajaxTodialog : function() {
        return this.each(function() {
            var $this = $(this);
            $this.click(function(event) {
                var title = $this.attr("title") || $this.text();
                var options = {};
                var w = $this.attr("width");
                var h = $this.attr("height");
                var maxh = $this.attr("maxh");
                if (w)
                    options.width = w;
                if (h)
                    options.height = h;
                if (maxh)
                    options.maxheight = maxh;
                var focus = $this.attr("focus");
                if (focus) {
                    options.focus = focus;
                }
                options.title = title;
                options.contentType = "ajax";
                options.showButton = eval($this.attr("showButton") || "false");
                options.showCancel = eval($this.attr("showCancel") || "false");
                options.showOk = eval($this.attr("showOk") || "false");
                options.type = "wee";
                options.onopen = eval($this.attr("onopen") || function() {
                });
                options.boxid = "pop_ajax_dialog";

                var url = unescape($this.attr("href")).replaceTmById($(event.target).parents(".unitBox:first"));
                YUNM.debug(url);
                if (!url.isFinishedTm()) {
                    $.showErr($this.attr("warn") || YUNM._msg.alertSelectMsg);
                    return false;
                }

                $.weeboxs.open(url, options);

                event.preventDefault();
                return false;
            });
        });
    }});
//-->
</script>
</body>
</html>      

你可能眨眼一看,怎麼沒有相關的彈出框呢,隻有個a标簽?當然了,如果你使用過dwz或者看過我以前的文章(例如Bootstrap summernote,超級漂亮的富文本編輯器),你可能對a标簽打開dialog就不會陌生。

通過$.fn.extend加載一個全局的ajaxTodialog 方法,在頁面初始化的時候,為a标簽執行該方法。

ajaxTodialog 的關鍵内容就是擷取a标簽指定的對話框options,比如title(文中為“新增項目回報”)、href(通過該指定的背景請求位址獲得remote的view試圖,加載到對話框中,後續介紹)、width(為weebox彈出框設定寬度)、foucs(設定打開時的焦點元件)。

當然還有其他的可選屬性,是否展示button等,然後将參數和url傳遞到weebox的open方法(核心,後續詳細介紹)。