在jquery中延迟焦点

时间:2019-05-12 09:27:42

标签: javascript jquery

我想要当我单击textBox时textBox会延迟聚焦。 现在,当我使用setTimeOut在onFocus()属性中设置一个函数时,它将首先聚焦,然后运行其余代码,这不是我想要的。 我想延迟关注,而我的代码不起作用!

<input type="tel" id="PhoneInput" placeholder="phone number" onFocus="focusDelay()"/>

此功能首先关注textBox,然后运行setTimeout

function focusDelay()
{
    setTimeout(function(){
        $('#PhoneInput').focus();
    },4000);
}

1 个答案:

答案 0 :(得分:0)

收到事件后,它已经 集中了元素。您需要取消聚焦(模糊),然后再聚焦。当您将其重点放在目标上时,您需要一个标志来告诉您的代码可以允许发生焦点。像这样(我减少了延迟):

var focussing = 0;
function focusDelay()
{
    if (!focussing) {
        var $input = $('#PhoneInput');
        $input.blur();
        setTimeout(function(){
            ++focussing;
            $input.focus();
            --focussing;
        }, 1000);
    }
}
<input type="tel" id="PhoneInput" placeholder="phone number" onFocus="focusDelay()"/>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

在这种情况下,我倾向于使用计数器标志而不是布尔标志,尽管在这种特殊情况下,布尔可能会起作用。