1

プロジェクトの概要: Child ポップアップを開き、フォームに情報を入力します。情報がデータベースに入力されると、ポップアップが非表示になり、親ページが再表示されます。次に、親ページにデータベースからの情報が表示されます。

ほとんどの場合、私が持っているコードは機能しますが、フォームを送信するとウィンドウが閉じて、情報がデータベースに追加されない場合があります。データベースにデータを挿入する時間を確保するために、どこかに遅延を追加する必要があるかどうか疑問に思っていますが、タイミングコードを使用したことがなく、どこに行く必要があるのか​​ わかりません。データベースに時々しか追加されない理由を誰か知っていますか? 問題が発生するのは、フォームを使用する最初の数回と、同じ情報を続けて入力しようとするときです。

フォームに関連するコードは次のようになります。

    <script>
    var db = window.openDatabase("DB1", "", "DB", 1024 * 1000)

    function closeSelf() {
        document.forms['moneyorder_form'].submit();
        hide(document.getElementById('AddMoneyOrderPopup'));
        unHide(document.getElementById('MoneyOrdersMain'));
    }

    $(document).ready(function () {
        $('#moneyorder_form').submit(function () {

            insertMO($('#moCNumber').val(), $('#moCAmount').val(), "MoneyOrder");
            renderMoneyOrders();
            return false;
        });
        renderMoneyOrders();
    });


</script>

<div data-role="page" id="AddMoneyOrderPopup">
    div data-role="content" data-theme="a">
        <h2 style="text-align:center">Money Order</h2>
        <form method="get" id="moneyorder_form" name="moneyorder_form" onsubmit="closeSelf()">
            <div class="ui-grid-a">
                <div class="ui-block-a">
                    <p style="text-align:center; display:inline"><b>Number</b></p>
                    <p><input type="number" required="required" step="1" id="moCNumber" name="moCNumber"></p></div>
                <div class="ui-block-b">
                    <p style="text-align:center; display:inline"><b>Amount</b></p>
                    <p><input type="number" required="required" min=".01" step=".01" id="moCAmount" name="moCAmount"></p>
                </div>
                <div class="ui-block-a">
        <input type="submit" data-role="button" data-theme="a" value="Add" />
                </div>
            </div>
        </form>
    </div>
    </div>
4

1 に答える 1

0

サーバーベースのデータベースではなく、新しい HTML5 SQL API を使用しているようです。これが原因である場合、HTML5 はtransaction、オプションのエラーおよび成功のコールバックを受け入れる関数をサポートしています。

db.transaction(function(tx) {
  // executeSql
}, opt_errorCallback, opt_successCallback);

したがって、タイマーを追加する代わりに、2 つのコールバックを作成し、成功のコールバックが呼び出された場合にのみ新しいレコードを表示します。

于 2013-01-16T19:43:07.303 に答える