我目前正在对特定表单元素使用焦点,以便知道用户何时向前跳转或单击其他字段。
我需要知道这一点,因为ajax调用会在此之后立即启动并填充几个不同的字段(例如,输入有效的邮政编码,搜索数据库并返回城市)。
现在,我的问题是,ajax调用会收到一个html响应并在加载时导致表单失去当前的焦点。
我需要一种方法来保存焦点并在ajax调用后恢复它。
到目前为止,我已经完成了导航工作。它破坏了很多,并且还干扰了页面上其他内容的加载(例如对话框窗口)。所以,我认为必须有一个更好的方法,这就是为什么我在这里。如果您需要更多信息,请与我们联系。代码如下。
一切顺利!
$('.DZipCode').focusout(function () {
var ZipCode = $('.DZipCode').val();
$.ajax({ // create an AJAX call...
async: false,
type: "POST", // GET or POST
url: "/Home/SelectZipCodeDataDestination", // the file to call`
data: { zipCode: ZipCode },
success: function (response) { // on success..
$(":input").focus(function() {
var prevFocus;
prevFocus = $(this).attr("id");
$('#quotetab').html(response);
$('#'+prevFocus).focus();
// });
} // end of success
}); // end of .ajax
});
答案 0 :(得分:6)
我能想到的最简单的方法是在按下某个键时设置一个标志,然后只要你需要知道就检查标志。
var tabPressed = false;
$('input[type="text"], textarea')
.keydown(function(e) {
var keyCode = e.keyCode || e.which;
tabPressed = (keyCode==9) ? true : false;
})
.focus(function() {
tabPressed = false;
});
然后你可以做
if(tabPressed) {
//some stuff
}
在你的ajax成功回调中(或任何地方)。