如何将jquery ui对话框按钮变为复选框?

时间:2011-07-24 04:10:44

标签: javascript jquery jquery-ui

所以我是Jquery和Jquery UI的新手。我的对话框正常工作,但我要找的一件事是如何将对话框中的一个按钮更改为一个复选框。

我的情景: 用户将发布信息,如新闻等。但我想让他们有能力不向公众发布它。草案,如果你愿意的话。所以复选框就在“ok”和“cancel”按钮旁边。

我已尝试在对话框功能之前创建一个数组并将其放在那里,但我似乎无法找到将按钮声明为复选框的方法。

提前感谢你的帮助,

编辑:这是我尝试过的一些代码。我现在的问题是,我尝试设置按钮窗格的样式,它会消失。

var dialog = $('<div title="Create News Post">' +
                    '<form method="POST" action="index.php?controller=posts&action=add">' +
                        '<div id="tabs" class="form">' +
                            '<ul>' +
                                '<li><a href="#tabs-1">English</a></li>' +
                                '<li><a href="#tabs-2">French</a></li>' +
                            '</ul>' +
                            '<div id="tabs-1">' +
                                '<label class="first">' +
                                    '<span>English Title:</span>' +
                                    '<input type="text" name="en_title" />' +
                                '</label>' +
                                '<label>' +
                                    '<span>English Text:</span>' +
                                    '<textarea name="en_text">' +
                                    '</textarea>' +
                                '</label>' +
                            '</div>' +
                            '<div id="tabs-2">' +
                                '<label class="first">' +
                                    '<span>French Title:</span>' +
                                    '<input type="text" name="fr_title" />' +
                                '</label>' +
                                '<label>' +
                                    '<span>French Text:</span>' +
                                    '<textarea name="fr_text">' +
                                    '</textarea>' +
                                '</label>' +
                            '</div>' +
                        '</div>' +
                        '<div class="ui-dialog-buttonpane ui-widget-content ui-helper-clearfix">' +
                            '<div class="ui-dialog-buttonset">' +
                                '<input type="checkbox" id="isDraft" /><label for="isDraft">Publish?</label>' +
                                '<button id="btnSave" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" type="button" role="button" aria-disabled="false">' +
                                    '<span class="ui-button-text">Save</span>' +
                                '</button>' +
                                '<button id="btnCancel" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" type="button" role="button" aria-disabled="false">' +
                                    '<span class="ui-button-text">Cancel</span>' +
                                '</button>' +
                            '</div>' +
                        '</div>' +
                    '</form>' +
                '</div>'
            )
            .dialog({autoOpen: false,closeOnEscape: true,draggable:false,modal:true,resizable: false,width: 600});

2 个答案:

答案 0 :(得分:2)

1)您可以将按钮和复选框添加到创建对话框的HTML中,而不是为您生成按钮的使用对话框属性。创建对话框后,您可以设置处理程序 使用选择器中的对话框对象:

dialog = $('<div>' +
           '...' +
           '<input type="submit" id="btnCancel" value="Ok" />' +
           '<button id="btnCancel">Cancel</button>' +
           '<input type="checkbox" id="chkIsDraft" name="chkIsDraft" value="Is Draft" />' +
           '</div>')
            .dialog(autoOpen: false,closeOnEscape: true,draggable:false,modal:true,resizable: false});

$('#btnCancel', dialog).click(function(){
 //...
});

dialog.dialog('open');

编辑:在不阅读jQuery UI代码的情况下,似乎将从对话框html中删除具有类属性(如'ui-dialog-buttonpane')的div。所以,如果你选择这种方法 你必须避免重用jQuery UI对话框类。

2)其他方法可以使用对话框的属性添加第三个按钮,并将第三个按钮html替换为您的复选框:

//Again use the dialog object as the scope for the selector.
$('.ui-dialog-buttonpane button:eq(1)',dialog.parent()).replaceWith('<input type="checkbox" id="chkIsDraft" name="chkIsDraft">Is Draft</input>');

编辑:对话框返回的对象正确引用了在创建对话框时使用的DOM元素,而不是使对话框工作的所有机制。那是你的方式 将需要使用dialog.parent()作为上述选择器的范围。

3)第三个选项:使用一个常规按钮,提供相同的选中/取消选中语义,一个复选框(我的意思是视觉上,制作一些CSS),当点击此按钮时,请确保一些对话框标记中的隐藏字段(我想在按下“确定”后将发布的形式)会更新以反映检查状态。

$("<div>...</div>").dialog({
    modal: true /..
    },
    buttons: {
        //...
        'IsDraft': function() {
            $(this).toggleClass('checked')
            $("input[name='is_draft']",$(this).parent('form')).val($(this).hasClass('checked'));
        }
    }
});

示例(基于您的代码):

var dialog = $('<div title="Create News Post">' +
                    '<form method="POST" action="index.php?controller=posts&action=add">' +
                        '<div id="tabs" class="form">' +
                            '<ul>' +
                                '<li><a href="#tabs-1">English</a></li>' +
                                '<li><a href="#tabs-2">French</a></li>' +
                            '</ul>' +
                            '<div id="tabs-1">' +
                                '<label class="first">' +
                                    '<span>English Title:</span>' +
                                    '<input type="text" name="en_title" />' +
                                '</label>' +
                                '<label>' +
                                    '<span>English Text:</span>' +
                                    '<textarea name="en_text">' +
                                    '</textarea>' +
                                '</label>' +
                            '</div>' +
                            '<div id="tabs-2">' +
                                '<label class="first">' +
                                    '<span>French Title:</span>' +
                                    '<input type="text" name="fr_title" />' +
                                '</label>' +
                                '<label>' +
                                    '<span>French Text:</span>' +
                                    '<textarea name="fr_text">' +
                                    '</textarea>' +
                                '</label>' +
                            '</div>' +
                        '</div>' +
                    '</form>' +
                '</div>'
            )
            .dialog({autoOpen: false,closeOnEscape: true,draggable:false,modal:true,resizable: false,width: 600,height:400,
                buttons: {
                    IsDraft: function(){alert('draft');},
                    Save: function(){alert('saving');},
                    Cancel: function(){alert('cancel');}
                }
            });
         //lets do a replacement to get a checkbox in the button pane.     
        $('.ui-dialog-buttonset button:eq(0)',dialog.parent()).replaceWith('<input type="checkbox" id="chkIsDraft" name="chkIsDraft">Is Draft</input>');
        dialog.dialog('open');

答案 1 :(得分:0)

也许它会有所帮助:看看JQuery UI button。它可以作为一个复选框。您可以在对话框中为您的目的创建单独的按钮。