如何为Bootstrap模式窗口指定主要和辅助操作?

时间:2011-11-18 14:07:25

标签: javascript jquery forms twitter-bootstrap

我正在使用Twitter's Bootstrap modal functionality。当有人点击我的表单上的提交时,我正在测试他们是否检查了任何可用的选项:

$('form').submit(function(event) {
        var $target = $('.column').find(':checkbox');                                                        
        if( !$target.is(':checked') ){ // if none of the sub-options are checked
            event.preventDefault();
            $('#my-modal').modal({
                show: 'true',
                backdrop: 'true',
                keyboard: 'true'
            });
        }                                       
    });

...并显示模态窗口,如果他们没有。然后我喜欢模态上的“主要”按钮继续表单提交,而次要按钮则只需关闭模态窗口。

我确信这应该是相当简单的,但我目前对jQuery的了解只是在复制/粘贴级别,文档没有给出如何执行此操作的示例。

我已经设置了一个jsFiddle,我有here - 谢谢。

编辑 - 我在下面添加了一些代码(感觉有点hacky),它会在点击辅助按钮时关闭模态窗口。单击主按钮时仍然不确定如何使表单继续:

$('#my-modal .secondary').click(function() {
    $('#my-modal').modal({
        show: 'false'
    });
});

问题现在归结为:'有一种简单的方法可以告诉表单“好了,一旦点击主按钮就继续”吗?'

1 个答案:

答案 0 :(得分:13)

嗯,问题是,现在Bootstrap没有任何适当的回调功能按钮。因此,您必须以迂回的方式执行此操作并创建自己的。希望这有帮助!

这是一个JS小提琴,表明它有效:http://jsfiddle.net/iwasrobbed/rYLWz/3/

以下是代码:

HTML文件

<form>
<ul class="inputs-list">
    <li>
      <label>
        <input type="checkbox" name="optionsCheckboxes" value="option1" />
        <span>Option 1</span>
      </label>
    </li>
    <li>
      <label>
        <input type="checkbox" name="optionsCheckboxes" value="option2" />
        <span>Option 2</span>
      </label>
    </li>
</ul>
<div class="actions">
    <a href="#" class="save-button btn large primary">Save changes &raquo;</a>

    <!-- Hide the real submit button /-->
    <input type="submit" class="hidden">
</div>
</form>

<div id="my-modal" class="modal hide fade">
    <div class="modal-header">
        <a href="#" class="close">&times;</a>
        <h3>Are you sure?</h3>
    </div>
    <div class="modal-body">
        <p>You haven&rsquo;t selected any options.</p>
    </div>
    <div class="modal-footer">
        <a href="#" class="okay-button btn primary">Okay &raquo;</a>
        <a href="#" class="go-back-button btn secondary">Go back</a>
    </div>
</div> <!-- /modal -->

JS档案

$(document).ready(function() {

    // Verify if checkboxes were checked.
    // If they weren't, show a modal
    $('a.save-button').click(function() {
        if ($("input:checked").length === 0) {

            $('#my-modal').modal({
                show: 'true',
                backdrop: 'true',
                keyboard: 'true'
            });
        } else {
            $('form').submit(); 
        }

        // prevent click jump
        return false;
    });

    // Let's attach a listener on form submission
    $('form').submit(function() {
        alert('We submitted the form!');
    });

    // Hide modal if "Go back" is pressed
    $('#my-modal .go-back-button').click(function() {
        $('#my-modal').modal('hide');
        alert('We went back to the form');
    });

    // Hide modal if "Okay" is pressed
    $('#my-modal .okay-button').click(function() {
        $('#my-modal').modal('hide');
        $('form').submit();
    });

});

我还添加了一些CSS:

ul.inputs-list li {
    margin-left: 10px;
}
.hidden {
    display: none   
}