0

クエリ文字列に特定のパラメーターが設定されている場合、ページの読み込み時にページにフォームを送信しようとしています。フォームは ajax を使用して送信され、正常に動作し、クエリ文字列からのフォーム フィールドの事前入力も問題ありませんが、フォームを自動的に送信しようとしても、ページ読み込みの無限ループに陥ります。

PHP

// top of page
<?php
    if (isset($_GET['postcode'])) {
        $postcode = trim($_GET['postcode']);
    } else {
        $postcode = '';
    }

    if (isset($_GET['phone_num'])) {
        $phone_num = trim($_GET['phone_num']);
    } else {
        $phone_num = '';
    }
?>

jQuery

/* 
// causing infinite page loads
if ($('input[name="phone_num"]').val() != '' || $('input[name="postcode"]').val() != '') {
    $('#check').trigger("click");
    return false;
}
*/

$('form').submit(function() {
    $.get("script.php", $(this).serialize(), function(data){
        // process results
    }, "json");      
    return false;
});

HTML

<form class="navbar-form pull-right" action="" method="get">
    <input class="span2" type="text" name="phone_num" placeholder="Phone Number" value="<?php echo $phone_num; ?>">
    <input class="span2" type="text" name="postcode" placeholder="Postcode" value="<?php echo $postcode; ?>">
    <button type="submit" class="btn btn-primary" id="check">Check</button>
</form>

自動フォーム送信に関数を使用する代わりにclick、同じことを試みました$('form').submitが、同じ問題が発生します。パラメータが設定されている場合、ajax呼び出しが自動的に行われるように、ページが通常どおり機能することを期待していましたが、明らかにそうではありません。

4

4 に答える 4

1

submit イベントをバインドする前に、コードを終了しています。if ステートメントの を削除してreturn falseから、if ステートメントを送信バインドの後に移動します。

$('form').submit(function() {
    $.get("script.php", $(this).serialize(), function(data){
        // process results
    }, "json");      
    return false;
});

if ($('input[name="phone_num"]').val() != '' || $('input[name="postcode"]').val() != '') {
    $('#check').trigger("click");
    //return false;
}
于 2013-07-23T14:11:06.550 に答える
1

次のようなことを試してください:

if($('input[name="phone_num"]').val() && $('input[name="postcode"]').val()) {
    $('form').submit(function() {
        $.get("script.php", $(this).serialize(), function(data){
            // process results
        }, "json");      
        return false;
    }).submit();
}
于 2013-07-23T14:13:25.550 に答える
1

コードでこの行を使用してください。

$('form').trigger("submit");
于 2013-07-23T14:13:33.927 に答える
1

HTML

<form class="navbar-form pull-right" action="" method="get">
    <input class="span2" type="text" name="phone_num" placeholder="Phone Number" value="<?php echo $phone_num; ?>">
    <input class="span2" type="text" name="postcode" placeholder="Postcode" value="<?php echo $postcode; ?>">
    <input type="button" class="btn btn-primary" id="check">Check</button>
</form>

jQuery

$('#check').click(function(e) {
    e.preventDefault();
    $.get("script.php", $('form').serialize(), function(data){
        // process results
    }, "json");      
    return false;
});
if ($('input[name="phone_num"]').val() != '' || $('input[name="postcode"]').val() != '') {
    $('#check').trigger("click");
}

ボタンを使用するsubmitと、デフォルト イベント (フォームの送信) が実行され、.click()イベントのハンドラーが処理されます。これを回避するe.preventDefault();には、イベントのスクリプト化された部分のみを処理するようにします。

于 2013-07-23T14:11:15.963 に答える