检测焦点是否是由按键或咔嗒声引起的

时间:2011-10-19 19:11:54

标签: jquery

我目前正在对特定表单元素使用焦点,以便知道用户何时向前跳转或单击其他字段。

我需要知道这一点,因为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

});

1 个答案:

答案 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成功回调中(或任何地方)。