1

コードは次のとおりです。

<form  method="post" id="cp_ind_form">

    // lots of input fields!
    <input type="submit" name="update_submit" value="Update"  />
    <input type="submit" name="delete_submit" value="Delete"  onclick="deleteConfirm()" />

</form>

scripts.js (このファイルが上記のページに接続されていることを確認)

(function deleteConfirm() {
    var s = document.getElementById('confirm');
    s.onchange = function() {
        var yes = confirm('Do you really want to delete this location?');
        if (yes) { 
            var f = document.getElementById('cp_ind_form');
            f.submit();
        }
    }
})();

}

これは私を狂わせています。このような基本的な機能がここでは機能していませんか? 私は基本的に、DOES が機能する他のコードからコピーしていますが、これも例外ではありません。細部が欠けているかどうか誰かが確認できますか?

4

3 に答える 3

5

コードを見てください。

[送信]をクリックすると、onchangeイベントが何かに追加されます。

確認が表示されるようにトリガーしたり、元の送信をキャンセルしたりすることはありません。

そして、それを(funciton(){})();でラップすることは意味がありません。

そのはず

function deleteConfirm() {
    return confirm('Do you really want to delete this location?');   
}

onclick="return deleteConfirm();"
于 2013-01-25T16:36:16.767 に答える
2

が呼び出されたときに実際に確認を実行するにdeleteConfirmは、コードを次のように変更します。

function deleteConfirm() {
    var yes = confirm('Do you really want to delete this location?');
    if (yes) { 
        document.getElementById('cp_ind_form').submit();
    }
    // block default submit
    return(false);
}

これも false を返すため、デフォルトのフォーム送信は行われません。

次に、HTML を次のように変更します。

onsubmit="return deleteConfirm()"

onclick の代わりに onsubmit を処理する場合、ハンドラーから false を返すことで、デフォルトの送信をブロックできます。

于 2013-01-25T16:38:05.080 に答える
1

deleteConfirm()ボタンクリックで実行されます。この関数内で、アイテムが変更されるonchangeのを待つよりもイベントにコードを割り当てています。#confirmその要素がどこにあるかはわかりませんが、イベントが発生することはないので、確認ボックスが表示されることはありません。

于 2013-01-25T16:36:46.107 に答える