4

preventdefaultとがあっても、フォームは IE で送信されreturnvalue = falseます。Chrome と firefox ではすべて問題ありません。

私も試しevent.stopPropagation()ました。

$('#form1').submit(function(event) {
    var xxx = $('#xxx').val();
    var yyy = $('#yyy').val();
    var zzz = $('#zzz').val();
    var uuu = $('#uuu').val();
    if (zzz != '000000' && zzz != '') {
        validate_xxxyyy(uuu, function(response) {
            if (response === false) {
                if (xxx == '') {
                    alert("XXX undefined!");
                    event.preventDefault ? event.preventDefault() : event.returnValue = false;
                }
                else if (yyy == '') {
                    alert("yyy Undefined!");
                    event.preventDefault ? event.preventDefault() : event.returnValue = false;
                }
            }
            else {
                return true;
            }
        });
    }
    else {
        return true;
    }
});

function validate_xxxyyy(uuu, callback) {
    var data_string = 'uuu=' + uuu;
    $.ajax({
        url: 'ajax.php',
        type:'POST',
        data: data_string,
        dataType: 'json',
        cache: false,
        async: false,
        success: function(response){
            callback(response);
        }
    });
}
4

4 に答える 4

1

あなたの問題はdefered functions に関するものです。

あなたの成功の機能:

$.ajax({
        url: 'ajax.php',
        type:'POST',
        data: data_string,
        dataType: 'json',
        cache: false,
        async: false,
        success: function(response){
            callback(response);
        }
    });

延期されます。スレッド化されていると考えてください。そのsubmitため、コールバックが発生するのを待たずに続行します。つまり、 を呼び出しませんevent.preventDefault()。より正確には呼び出しますが、手遅れです。submit は既に返されています。

これを呼び出しているものを送信ボタン(現在は推測している)から通常のボタンに変更してから検証し、 を使用してこの検証が成功した場合にのみフォームを送信し$('form').submit();ます。

$('#button').click(function(event) {
    var xxx = $('#xxx').val();
    var yyy = $('#yyy').val();
    var zzz = $('#zzz').val();
    var uuu = $('#uuu').val();
    if (zzz != '000000' && zzz != '') {
        validate_xxxyyy(uuu, function(response) {
            if (response === false) {
                if (xxx == '') {
                    alert("XXX undefined!");

                }
                else if (yyy == '') {
                    alert("yyy Undefined!");

                }
            }
            else {
                $('#form1').submit();
            }
        });
    }
    else {
        $('#form1').submit();
    }
});

function validate_xxxyyy(uuu, callback) {
    var data_string = 'uuu=' + uuu;
    $.ajax({
        url: 'ajax.php',
        type:'POST',
        data: data_string,
        dataType: 'json',
        cache: false,
        async: false,
        success: function(response){
            callback(response);
        }
    });
}
于 2013-08-01T10:32:54.353 に答える
-1

次のように : event.preventDefault() を最初に置きます。

$('#form1').submit(function(event) {
    event.preventDefault();
    var xxx = $('#xxx').val();
    var yyy = $('#yyy').val();
    ...

または、送信を防ぐためにフォームの onsubmit イベントをオーバーライドする必要があります。

于 2013-08-01T10:36:48.707 に答える