12

我正在使用Twitter 的 Bootstrap 模态功能。当有人在我的表单上单击提交时,我正在测试他们是否检查了任何可用选项:

$('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 - 谢谢。

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

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

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

4

1 回答 1

16

好吧,问题是现在 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   
}
于 2011-11-22T04:22:20.780 回答