Javascript 如何知道光标现在在输入或文本区域或选择中处于焦点

Javascript 如何知道光标现在在输入或文本区域或选择中处于焦点,javascript,jquery,ajax,Javascript,Jquery,Ajax,我想运行ajax来获取一个值,如果值为true,那么提交表单,下面的代码使用onsubmit=xxx,但是这个表单将立即提交,而不是等待ajax结果。然后我想使用带有onclick函数的“a”标记来提交表单,这可以完成这项工作,但是当我使用“enter”键提交表单时,将不会运行ajax代码。然后我想在光标位于输入字段时绑定按键以提交表单。如何检查光标是否在表单字段中 <?php if(isset($_POST['act'])){ $rs=array(

我想运行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>

变量滤波器={
表单:$('.filters')。查找('form'),
提交:函数(){
$.ajax({
url:'index.php',
类型:'POST',
数据:{
行动:“阿贾克斯”
},
成功:功能(rs){
评估('var-rs='+rs);
如果(rs['status']==1){
返回true;
}否则{
返回false;
}
}
});
}
}

document.activeElement
返回当前关注的元素,即如果用户键入任何击键事件,将获取击键事件的元素。

document.activeElement
返回当前关注的元素,即,如果用户键入任何键击事件,将获取键击事件的元素。

正如@Rajesh Jinaga所说的
document.activeElement
返回当前关注的元素,但我想解释一下它为什么不工作

在进行ajax调用时,不会等到ajax返回true或false。它将执行。因此,您需要防止表单提交,并在ajax调用完成时使用javascript提交表单

HTML

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

正如@Rajesh Jinaga所说的
document.activeElement
返回当前关注的元素,但我想向您解释为什么它不起作用

在进行ajax调用时,不会等到ajax返回true或false。它将执行。因此,您需要防止表单提交,并在ajax调用完成时使用javascript提交表单

HTML

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

@L105,谢谢你的回答,我修改了我的代码以匹配你的答案,但是表单不能使用$(this.submit())提交


$(函数(){
$('form')。提交(函数(){
$.ajax({
url:'index.php',
类型:'POST',
数据:{
行动:“阿贾克斯”,
状态:$('[name=status]')。val()
},
成功:功能(rs){
评估('var-rs='+rs);
如果(rs['status']==1){
$(this.submit();//无法提交
}否则{
警报(“错误”);
}
}
});
返回false;
});
});

@L105,谢谢你的回答,我修改了我的代码以匹配你的答案,但是表单不能使用$(this.submit())提交


$(函数(){
$('form')。提交(函数(){
$.ajax({
url:'index.php',
类型:'POST',
数据:{
行动:“阿贾克斯”,
状态:$('[name=status]')。val()
},
成功:功能(rs){
评估('var-rs='+rs);
如果(rs['status']==1){
$(this.submit();//无法提交
}否则{
警报(“错误”);
}
}
});
返回false;
});
});
$(this).submit()不起作用,因为您处于不同的上下文中,并且成功回调调用程序发送与ajax相关的对象,但不发送表单DOM对象。将对象存储到表单上下文中的变量中,并在成功回调中使用它

 $(function(){
    $('form').submit(function (){
       var form = this;
        $.ajax({
            url:'index.php',
            type:'POST',
            data:{
                act:'ajax',
                status: $('[name=status]').val()
            },
            success:function(rs){
                eval('var rs='+rs);
                if(rs['status']==1){
                    $(form).submit();   // or $('form').submit()
                }else{
                    alert('error');
                }
            }
        });
        return false;
    });
});
$(this).submit()将无法工作,因为您处于不同的上下文中,并且成功回调调用程序发送与ajax相关的对象,但不发送表单DOM对象。将对象存储到表单上下文中的变量中,并在成功回调中使用它

 $(function(){
    $('form').submit(function (){
       var form = this;
        $.ajax({
            url:'index.php',
            type:'POST',
            data:{
                act:'ajax',
                status: $('[name=status]').val()
            },
            success:function(rs){
                eval('var rs='+rs);
                if(rs['status']==1){
                    $(form).submit();   // or $('form').submit()
                }else{
                    alert('error');
                }
            }
        });
        return false;
    });
});

为什么不能允许表单提交,并在单个请求中同时执行任何AJAX请求?如果需要进行验证,应该绑定到表单的
submit
事件并有条件地取消它,但这通常用于客户端验证。我认为,在逻辑上,一次提交来测试是否可以进行第二次“真正的”提交是一个相当严重的问题。为什么不能允许表单提交就这样发生,在一个请求中同时执行任何AJAX请求?如果需要进行验证,应该绑定到表单的
submit
事件并有条件地取消它,但这通常用于客户端验证。我认为在你的逻辑中,做一次提交来测试你是否能做第二次“真正的”提交是一个相当严重的问题。你没有actod和方法,请尝试添加
,或者你的ajax调用失败。试着将
success
更改为
always
。而你eval什么都不做,请删除它。eval正在工作,page return json str,我需要将其设置为数组。什么是“始终成功”?您没有Actd和方法,请尝试添加
,或者ajax调用失败。尝试将
success
更改为
always
。您eval不做任何操作,请将其删除。eval正在工作,page return json str,我需要将其设置为数组。这是什么“永远成功”?