1

私はいくつかのJavaScriptを使用して、フォームフィールドを可能な一致の配列と照合しています。一致するユーザーに応じて確認ウィンドウが表示され、結果フォームが送信されるか、ユーザーがページに戻るかによって異なります。このプロセスは Firefox と Chrome では期待どおりに機能しますが、IE と Opera では代替送信がまだトリガーされています。誰かがこれを修正する方法を提案できますか?

簡単にするために、スクリプトはほとんどのデータを削除しています。

$(function(){
    var check = ["All", "array", "values"];
    $('#Next').click(function(){
        $(this).addClass('hit');
        $('#Cancel').attr('disabled', 'disabled');
    });
    $('#Form').bind('submit', function(){
        if($(this).find('.hit').attr('id')=='Next'){
            $('#Next').removeClass('hit');
            var match = $('input[name="WHAT"]', $('#idBothAddressesTable')).val().trim();
            if(match.length==0){
                var postCode = $('input[name="WHAT2"]', $('#idBothAddressesTable')).val().trim();
            }
            var matched = $.inArray(match, check);
            if(matched != -1){
                var ask = confirm("This is the case, proceed or cancel");
                if(ask==true){
                        $.post('dowhat.php',{flag: 1}, function()){
                        $('#Form').unbind('submit').submit();
                    });
                }
                else{
                    ('#Cancel').removeAttr('disabled');
                    return false;
                }
            }
        }
    });
});

フォームには実際には 2 つの送信値があります。それ以外は非常に基本的なものですが、単純化するために大部分を削除しました。

<form action="nextpage.php" method="post" id="Form">
    <input type="text" name="WHAT" />
    <input type="text" name="WHAT2" />
    <input type="submit" name="CANCEL" value="Cancel" id="Cancel" />
    <input type="submit" name="NEXT" value="Next" id="Next" />
</form>

firefox と chrome では、誰かが ask==true 基準を満たしている場合に機能するようです。$.post が先に進み、「次へ」送信をクリックしたかのようにフォームが送信されます。

ただし、IE と Opera では $.post が発生しますが、「CANCEL」がクリックされたかのようにフォームが送信されます。

誰かが私にこれを説明できますか?解決策が見つからないようです?

4

2 に答える 2

2

submit1つのフォームに2つのボタンを配置することはお勧めしません仕様どおりの有効なHTMLですが、IMOは悪い習慣です。

どのボタンを押してもsubmit、意図したデフォルトの動作を妨げることなくイベントを実行しています。

また、jQueryを使用すると、にbind'ingsubmitしますがformsubmitデフォルトではすでにフォームにバインドされています。submit次のことを試すことができますが、コードをリファクタリングして2番目のボタンを削除し、別のボタンに置​​き換えることを強くお勧めします。

試してみてくださいpreventDefault()...

$('#Form').bind('submit', function(e){ // don't forget the "e"
        e.preventDefault(); // first line

        // rest of your code follows under preventDefault

});
于 2012-12-13T17:32:32.943 に答える
1

2 つの送信ボタンがあるフォームがあり、フォームに送信するように指示しています。

結果は未定義です。各ブラウザは独自の方法で処理します! したがって、フォームに送信するように指示する代わりに、呼び出す必要がある送信ボタンのクリック イベントを呼び出すことをお勧めします。

于 2012-12-13T17:17:01.560 に答える