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