【问题标题】:Customizing jQuery UI dialog自定义 jQuery UI 对话框
【发布时间】:2012-02-27 23:09:47
【问题描述】:

为了学习 jQuery UI 对话框,我定义了下面的代码。

我需要完成以下三个任务

1) 使用我的图像作为“确定”按钮和“取消”按钮

2) 使用我的自定义图像作为对话框右上角的关闭按钮

3) 整个对话框的背景应该是“灰色”(包括标题,以及确定按钮的位置。)

重要的一点是样式应该只应用于我的对话框。所有其他小部件都应具有默认行为。对于内容区域,我可以使用#myDiv.ui-widget-content 来实现。

您能否为此建议代码?

注意:如果可能,请使用最佳做法。 (例如 1. 使用变量 $myDialog 2. 使用 autoOpen: false)

<html xmlns="http://www.w3.org/1999/xhtml">

<head id="Head1" runat="server">
    <title> </title>

    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.4.4.js"></script>

    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.6/jquery-ui.js"></script>


 <link href="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.13/themes/redmond/jquery-ui.css" rel="stylesheet" 
        type="text/css" />


     <link href="Styles/OverrideMyDialog.css" rel="stylesheet" 
        type="text/css" />-



<script type="text/javascript">

    $(document).ready(function () {
        var $myDialog = $(".addNewDiv").dialog(
                                    {
                                        autoOpen: false,
                                        title: 'My Title',
                                        buttons: { "OK": function () {
                                            $(this).dialog("close");
                                            ShowAlert();
                                            return true;
                                        },
                                            "Cancel": function () {
                                                $(this).dialog("close");
                                                return false;
                                            }
                                        }

                                    }
                                           );





        $('#myOpener').click(function () {
            return $myDialog.dialog('open');


        });
    });

    function ShowAlert() {
        alert('OK Pressed');
    }

</script>

<body>
    <div>
    <input id="myOpener" type="button" value="button" />
</div>
<div class="addNewDiv"  id="myDiv" title="Add new Person" >
    <table>
        <tr>
            <td>
                Name
            </td>

        </tr>
        <tr>
            <td>
                Age
            </td>

        </tr>
    </table>
</div>
</body>
</html>

另外,我创建了一个 css 类来覆盖我的对话框的小部件功能

    /*
   *File Name: OverrideMyDialog.css
   * jQuery UI CSS is overriden here for one div
  */


/* Component containers
----------------------------------*/

#myDiv.ui-widget-content 
{ 
border: 5px solid Red;
background: Gray url(images/ui-bg_inset-hard_100_fcfdfd_1x100.png) 50% bottom repeat-x;
color: Green; 
} 

【问题讨论】:

    标签: jquery jquery-ui jquery-ui-dialog


    【解决方案1】:

    您应该自定义 css 文件。类是:

    .ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
    .ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative;  }
    .ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } 
    .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
    .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
    .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
    .ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
    .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
    .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
    .ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
    .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
    .ui-draggable .ui-dialog-titlebar { cursor: move; }
    

    【讨论】:

    • 您能否提供一个示例(例如在哪里应用以及如何应用)?
    • 那是标签,不是对话框
    • 你可以在 jquery-ui.css 文件中找到这个
    • @Lijo,检查我的答案。如果有任何问题,您可能需要输入!important。
    【解决方案2】:

    为此,您必须覆盖 jQuery UI (jquery.ui.theme.css) 提供的默认 css。

    1. 确定按钮的图像:您需要更改.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default 背景图像。
    2. 关闭按钮:更改.ui-widget-header .ui-icon
    3. 对话背景:更改.ui-widget-content背景属性。

    希望这对你有用。

    【讨论】:

    • 转到jqueryui.com/themeroller,在这里您可以自定义您的主题。下载并使用它。我也做了同样的事情来学习。您可以使用 Firebug (FF)、Developer Tools F12 (IE)、F12 Chrome 来查看应用于项目的 css。仅使用此工具,我发现了上述元素。希望这行得通。
    • 另外,如果您对答案感到满意,请接受。其次,如果您需要任何帮助,请发表评论。
    • 例如,在我的例子中,theme.css 有这个类.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default,这里有一个属性background 有一些价值。您删除此值并像这样url("images/yourimage.png") repeat-x scroll 50% 50% #0E6D38 放置您自己的图像。将您的图像复制到主题文件夹内的images 文件夹。在 theme.css 中直接搜索我提供的术语,并更改 background 属性。
    • 谢谢。重要的一点是样式应该只应用于我的对话框。所有其他小部件都应具有默认行为。对于内容区域,我可以使用#myDiv.ui-widget-content 来实现。我如何达到帖子中提到的其他要求?
    • 你也可以对别人做同样的事情。您可以拥有自己的自定义 CSS 文件,在其中覆盖 jQuery 提供的默认值。在这种情况下,在此 CSS 文件中,您将拥有 #myDiv.ui-widget-content、#myDiv.ui-widget-header .ui-icon 等。此外,如果您的值未反映,请输入 !important,例如 background-color: red !important。
    【解决方案3】:

    我赞成上述答案。仍然 dialogClass:'myDialogCSS' 是我一直在寻找的关键。

    HTML 和 jQuery

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-
        1.4.4.js"></script>
        <script type="text/javascript"
            src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.6/jquery-ui.js"></script>
        <link href="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.13/themes/Sunny/jqueryui.
        css"
            rel="stylesheet" type="text/css" />
        <link href="Styles/MyStyleSheet.css"
            rel="stylesheet" type="text/css" />
    
        <script type="text/javascript">
            $(document).ready(function () {
                var $myDialog = $(".addNewDiv").dialog(
                {
                    modal: true,
                    autoOpen: false,
                    dialogClass: 'myDialogCSS',
                    title: 'My Title',
                    closeOnEscape: false,
                    open: function(event, ui)
                    {
                        //Disable OK Button
                        $(".ui-dialog-buttonpane
                            button:contains('OK')").attr("disabled", true).addClass("ui-state-disabled");
                    },
                    buttons: { "OK": function ()
                    {
                        $(this).dialog("close");
                        ShowAlert();
                        return true;
                    },
                        "Cancel": function ()
                        {
                            $(this).dialog("close");
                            return false;
                        }
                    }
                }
                );
                $('#myOpener').click(function ()
                {
                    return $myDialog.dialog('open');
                });
            });
            function ShowAlert() {
                alert('OK Pressed');
            }
        </script>
    </head>
    
    <body>
        <div>
            <input id="myOpener" type="button" value="button" />
        </div>
        <div class="addNewDiv" id="myDiv" title="Add new Person">
            <table>
                <tr>
                    <td>Name
    
                    </td>
                </tr>
                <tr>
                    <td>Age
                    </td>
                </tr>
            </table>
        </div>
    </body>
    </html>
    

    MyStyleSheet.css

       /*Title Bar*/
       .myDialogCSS .ui-dialog-titlebar
         {
           /*Hide Title Bar*/
           /*display:none; */
         }
    
       /*Content*/
       .myDialogCSS .ui-dialog-content
         {
           font-size:30px;
         }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      • 2011-01-13
      • 1970-01-01
      相关资源
      最近更新 更多