1

jquery $.post 関数に問題があります。私はこの関数をよく使用しますが、同じ関数は 1 つのケースを除いて正常に動作し、スクリプトの実行後にリダイレクトし続ける理由がわかりません。js コードは次のとおりです。

var record;    

$('.delbtt').on('click', function(e){
        e.preventDefault();
        var deleteid = $(this).parent().parent().find('#id').text();
        record = $(this).parent().parent();
        $('#delrecord').empty().val(deleteid);
    });

$(document).on('submit', '#delteform', function() {
        var formData = $(this).serialize();
        $.post('includes/delete.php',formData,processData);
        function processData(data){
            record.remove();    
        };
    });

HTML:

<!-- Modal -->
<div class="modal fade" id="deleteFormModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <form id="deleteform" class="form-horizontal" role="form" action="includes/delete.php" method="POST"> <!-- -->
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                <h4 class="modal-title">Delete record</h4>
            </div>
            <div class="modal-body">
                    <p>Are you sure you want to delete this person?</p>
            </div>
                <input type="hidden" id="delrecord" name="delrecord" value="" />
            <div class="modal-footer">
                <button type="button" class="btn btn-default empty" data-dismiss="modal">Cancel</button>
                <button id="delentry" type="submit" class="btn btn-danger">Delete Person</button>
            </div>
        </form>
        </div><!-- /.modal-content -->
    </div><!-- /.modal-dialog -->
</div><!-- /.modal -->

関数が正常に実行されたことはわかっています。なぜなら、alert("Why is this not working?");record.remove();に を配置すると、alert とバックグラウンド コードが実行されていることがわかりますが、同じページにとどまる代わりに「includes/delete.php」にリダイレクトされるからです。JS にある他のすべての $.post 関数を無効にしてみ$('#deleteform').submit()まし$(document).ready(function() {});た。なぜ私がこの振る舞いをしているのか誰にも分かりますか?

phpコード:

<?php
include('budgetprop/Initialize.php');
Database::GetInstance()->ConnectToServer($errors);
$record = $_POST['delrecord'];

# CONNECT TO DB
if(Database::GetInstance()->ConnectToServer($errors)){
    $insertSQL1 = "DELETE FROM salaries WHERE record_id = '".$record."' ";
    $stmt1 = sqlsrv_query(Database::GetInstance()->databaseConnection, $insertSQL1);
    # IF THERE IS AN ERROR
    if(!$stmt1){
                echo "Error, cannot delete record"; 
    }else{
        Database::GetInstance()->LastInsertId($stmt1);
    }
    # IF ALL QUERIES WERE SUCCSESSFUL, COMMIT THE TRANSACTION, OTHERWISE ROLLBACK
    if($stmt1 && !$errors){
        sqlsrv_commit(Database::GetInstance()->databaseConnection);
        # FREE THE STATEMENT
        Database::GetInstance()->FreeDBStatement($stmt1);
        echo "success";
        return true;
    }else{
        sqlsrv_rollback(Database::GetInstance()->databaseConnection);
        # FREE THE STATEMENT
        Database::GetInstance()->FreeDBStatement($stmt1);
        return false;
    }
    # NO CONNECTION WAS MADE
}else{
    return false;
};
?>

preventDefault()どちらも機能しません

4

2 に答える 2

4

フォームがまだ送信されているように聞こえるため、リダイレクトされます。あなたはそれを止めることができpreventDefault()ます...

$(document).on('submit', '#deleteform', function(e) {
    e.preventDefault();
    var formData = $(this).serialize();
    $.post('includes/delete.php',formData,processData);
    function processData(data){
        record.remove();    
    };
});
于 2013-10-10T15:12:10.427 に答える
0

「削除フォーム」がページ上のフォーム要素の ID であり、その中に「送信」タイプの入力またはボタンがあると仮定すると、削除ボタンを「ボタン」タイプに変更することをお勧めします。

ほとんどのブラウザーは、ボタンがクリックされたときに送信タイプの入力またはボタンを持つフォームで POST/GET を実行します。

次に、jQuery イベント ハンドラーを更新してボタンを選択し、onclick イベントを指定します。

$('#delentry').click(function() {
    ...
});

何らかの形式の適切な劣化を維持したい場合は、マークアップを送信タイプのボタンのままにして、$(document).ready() でボタンのタイプを「ボタン」に更新することができます。

于 2013-10-10T15:25:15.687 に答える