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を設定しました-ありがとう。

編集-セカンダリボタンがクリックされたときにモーダルウィンドウを閉じるコードを以下に追加しました(少しハッキーな感じがします)。プライマリボタンがクリックされたときにフォームを先に進める方法がまだわかりません。

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

問題は次のようになります。「プライマリボタンがクリックされたら、フォームに「OK、続行」と伝える簡単な方法はありますか?」

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 に答える