11

この質問には数百回回答されていることは知っていますが、潜在的な解決策をたくさん試しましたが、私のインスタンスではどれも機能していないようです。

以下は、フォームを送信するためのフォームとコードです。PHPスクリプトを起動します。フォームを手動で試してみたところ、一度しか送信されなかったため、スクリプト自体が送信の原因ではないことがわかりました。

jQuery コードの最初の部分は、ライトボックスを開き、その下のテーブルから値を取得することに関連しています。何らかの理由で問題が発生する可能性がある場合に備えて、これを含めました。

jQuery コード:

$(document).ready(function(){
    $('.form_error').hide();
    $('a.launch-1').click(function() { 
        var launcher = $(this).attr('id'),
            launcher = launcher.split('_');
        launcher, launcher[1], $('td .'+launcher[1]);
        $('.'+launcher[1]).each(function(){
            var field = $(this).attr('data-name'),
                fieldValue = $(this).html();
            if(field === 'InvoiceID'){
                $("#previouspaymentsload").load("functions/invoicing_payments_received.php?invoice="+fieldValue, null, function() {
                    $("#previouspaymentsloader").hide();
                });
            } else if(field === 'InvoiceNumber'){
                $("#addinvoicenum").html(fieldValue);
            }
            $('#'+field).val(fieldValue);
        });
    });
    $("#addpayment_submit").click(function(event) {         
        $('.form_error').hide();  
        var amount = $("input#amount").val();  
        if (amount == "") {  
            $("#amount_error").show();  
            $("input#amount").focus();  
            return false;
        }
        date = $("input#date").val();  
        if (date == "") {  
            $("#date_error").show();  
            $("input#date").focus(); 
            return false;
        } 
        credit = $("input#credit").val(); 
        invoiceID = $("input#InvoiceID").val(); 
        by = $("input#by").val(); 
        dataString = 'amount='+ amount + '&date=' + date + '&credit=' + credit + '&InvoiceID=' + invoiceID + '&by=' + by;
        $.ajax({
            type: "POST",
            url: "functions/invoicing_payments_make.php",
            data: dataString,
            success: function(result) {
                if(result == 1){                    
                    $('#payment_window_message_success').fadeIn(300);
                    $('#payment_window_message_success').delay(5000).fadeOut(700);
                    return false;
                } else {
                    $('#payment_window_message_error_mes').html(result);
                    $('#payment_window_message_error').fadeIn(300);
                    $('#payment_window_message_error').delay(5000).fadeOut(700);
                    return false;
                }
            },
            error: function() {
                $('#payment_window_message_error_mes').html("An error occured, form was not submitted");
                $('#payment_window_message_error').fadeIn(300);
                $('#payment_window_message_error').delay(5000).fadeOut(700);
            }
        });
        return false;
    });
});

html フォームは次のとおりです。

<div id="makepayment_form">
  <form name="payment" id="payment" class="halfboxform">
    <input type="hidden" name="InvoiceID" id="InvoiceID" />
    <input type="hidden" name="by" id="by" value="<?php echo $userInfo_ID; ?>" />
    <fieldset>
      <label for="amount" class="label">Amount:</label>
      <input type="text" id="amount" name="amount" value="0.00" />
      <p class="form_error clearb red input" id="amount_error">This field is required.</p> 
      <label for="credit" class="label">Credit:</label>
      <input type="text" id="credit" name="credit" />
      <label for="amount" class="label">Date:</label>
      <input type="text" id="date" name="date" />
      <p class="form_error clearb red input" id="date_error">This field is required.</p>
    </fieldset>
    <input type="submit" class="submit" value="Add Payment" id="addpayment_submit">
  </form>
</div>

私を夢中にさせているので、誰かが助けてくれることを願っています。ありがとう。

4

7 に答える 7

48

イベントを処理するためのデフォルトの動作を防止するだけでなく、イベント ハンドラーのダウンストリーム チェーンの実行を防止する必要がある場合もあります。event.stopImmediatePropagation()これは、 に加えて呼び出すことで実行できますevent.preventDefault()

コード例:

$("#addpayment_submit").on('submit', function(event) {
  event.preventDefault();
  event.stopImmediatePropagation();
});
于 2013-09-08T07:42:28.527 に答える
2

次の行を追加してみてください。

event.preventDefault(); 
event.stopImmediatePropagation();

これは私にとってはうまくいきました。

于 2015-01-30T12:30:20.537 に答える
0

残念ながら、@ user2247104の推奨に従ってスクリプトを変更することになりましたが、フォームはまだ2回送信されています。

ただし、@Cumbo、@Barmarも正しい軌道に乗っていましたが、それを機能させることを除いて

event.preventDefault();

スクリプトの最後に配置する必要がありました:

});
event.preventDefault();
return false;

助けてくれてありがとう:)

于 2013-04-05T01:42:03.467 に答える
0

クリック関数の下で、イベントに a を追加しますpreventDefault()

$("#addpayment_submit").click(function(event) {
    event.preventDefault();
    // Code here
    return false;
});

これで問題が解決する場合があります。preventDeafult()デフォルトのイベントのトリガーを停止します。この場合、フォームをクリックするとトリガーされ、ajax 関数を使用してフォームを送信すると再びトリガーされます。

return false;クリック機能の最後に追加することも役立ちます (上記参照)。

于 2013-04-05T00:07:49.337 に答える