0

ajax を実行して値を取得したいのですが、値が true の場合は、onsubmit=xxx を使用して以下のコードでフォームを送信しますが、このフォームは ajax の結果を待たずにすぐに送信されます。次に、onclick関数で「a」タグを使用してフォームを送信したい場合、これで機能しますが、「enter」キーを使用してフォームを送信すると、ajaxコードが実行されません。次に、カーソルが入力フィールドにあるときにキープレスをバインドしてフォームを送信します。カーソルがフォームフィールドの内外にあるかどうかを確認する方法は?

<?php 
    if(isset($_POST['act'])){
        $rs=array(
            'status'=>0
        );
        echo json_encode($rs);
        exit;
    }
?>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<div class="filters">
    <form onsubmit="return filters.submit()">
        <input type="text" name="name" />
        <input type="submit" value="submit" />
    </form>
</div>

<script type="text/javascript">
    var filters={
        form: $('.filters').find('form'),
        submit: function (){
            $.ajax({
                url:'index.php',
                type:'POST',
                data:{
                    act:'ajax'
                },
                success:function(rs){
                    eval('var rs='+rs);
                    if(rs['status']==1){
                        return true;
                    }else{
                        return false;
                    }
                }
            });
        }
    }
</script>
4

4 に答える 4

2

document.activeElement現在フォーカスされている要素、つまり、ユーザーが何かを入力した場合にキーストローク イベントを取得する要素を返します。

于 2013-11-04T04:27:54.583 に答える
2

@Rajesh Jinaga が言っdocument.activeElementたように、現在フォーカスされている要素を返しますが、それが機能しない理由を説明したいと思います。

ajax 呼び出しを行っている場合、ajax が true または false を返すまで待機しません。実行します。そのため、フォームが送信されないようにし、ajax 呼び出しが終了したときに JavaScript で送信する必要があります。

HTML

   <form>
        <input type="text" name="name" />
        <input type="submit" value="submit" />
    </form>

JAVASCRIPT (jQuery)

   $('form').submit(function (e){

        $.ajax({
            url:'index.php',
            type:'POST',
            data:{
                act:'ajax'
            },
            success:function(rs){
                // No need of EVIL eval('var rs='+rs);
                if(rs['status']==1){
                    $(this).submit(); // Will submit the form.
                }else{
                    alert("FAILED!");
                }
            }
            return false; // Shortcut for e.preventDefault() and e.stopPropagation() so it will prevent the form to be submitted.
        });
于 2013-11-04T04:53:54.117 に答える
0

@ L105、回答ありがとうございます。回答に合わせてコードを変更しましたが、 $(this).submit(); を使用してフォームを送信できません。

<?php 
    if(isset($_POST['act'])){
        $rs=array(
            'status'=> $_POST['status']
        );
        echo json_encode($rs);
        exit;
    }
?>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<div class="filters">
    <form action="index.php" method="post">
        <input type="text" name="status" />
        <input type="submit" value="submit" />
    </form>
</div>

<script type="text/javascript">
    $(function(){
        $('form').submit(function (){
            $.ajax({
                url:'index.php',
                type:'POST',
                data:{
                    act:'ajax',
                    status: $('[name=status]').val()
                },
                success:function(rs){
                    eval('var rs='+rs);
                    if(rs['status']==1){
                        $(this).submit();   // can't submit
                    }else{
                        alert('error');
                    }
                }
            });
            return false;
        });
    });
</script>
于 2013-11-04T05:36:30.573 に答える