Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在jQuery中单击链接时如何防止blur()运行?_Jquery - Fatal编程技术网

在jQuery中单击链接时如何防止blur()运行?

在jQuery中单击链接时如何防止blur()运行?,jquery,Jquery,我有: 我想通过单击锚元素来防止模糊功能在“模糊”时运行 也就是说,如果我点击另一个输入,点击页面上的某个地方,我想触发模糊,但如果我点击一个链接,我不想触发模糊 这是很容易实现的,还是我需要处理委托和信号量 谢谢将模糊延迟一点。如果查看器单击指向另一个页面的链接,则该页面应在该代码有机会运行之前更改: $('input').blur(function(){ alert('stay focused!'); }); 您可以试验一下超时的延迟值是否合适。我今天也不得不自己解决这个问题。我发

我有:

我想通过单击锚元素来防止模糊功能在“模糊”时运行

也就是说,如果我点击另一个输入,点击页面上的某个地方,我想触发模糊,但如果我点击一个链接,我不想触发模糊

这是很容易实现的,还是我需要处理委托和信号量


谢谢

将模糊延迟一点。如果查看器单击指向另一个页面的链接,则该页面应在该代码有机会运行之前更改:

$('input').blur(function(){
    alert('stay focused!');
});

您可以试验一下超时的延迟值是否合适。

我今天也不得不自己解决这个问题。我发现mousedown事件在模糊事件之前触发,所以您需要做的就是设置一个变量,指示mousedown事件首先发生,然后适当地管理模糊事件(如果发生)

$('input').blur(function(){
    setTimeout(function() {alert('stay focused!');}, 1000);
});

希望这对你有帮助

如果要将光标保持在
contenteditable
元素中的位置,只需:

var mousedownHappened = false;

$('input').blur(function() {
    if(mousedownHappened) // cancel the blur event
    {
        alert('stay focused!');
        $('input').focus();
        mousedownHappened = false;
    }
    else   // blur event is okay
    {
        // Do stuff...
    }
});

$('a').mousedown(function() {
    mousedownHappened = true;
});

您可以通过在正在单击的控件的
mousedown
事件中调用
preventDefault()
来获得此行为(否则会引起关注)。例如:

$('button').mousedown(function(){return false;});

请参阅。

在JavaScript知道焦点()的去向之前,
blur()
将触发。你可以试试这个答案,然后给
元素分配一个点击处理程序,它将焦点设置为$('#'+id)元素。这就是我想的,我想知道是否有一些我不知道的魔法of@David我想我可以存储模糊的元素,然后把模糊事件放在其他不是锚的焦点上…是的,我想这可能是你的朋友…我不想等到模糊发生在“合法”的模糊情况下才运行。是的,这是可行的,但它不是很优雅:(Blur会在其他任何事情之前被调用,而且似乎没有任何方法知道Blur事件之后会发生什么(例如,是否单击链接)。因此,在知道接下来会发生什么之前,推迟处理模糊事件的唯一方法是延迟。你可以试验需要多少延迟才能使其工作。我发现在Chrome中100毫秒是不够的,但1000毫秒就足够了。这是一个浏览器往往会有所不同的领域,因此你必须进行大量跨浏览器测试测试。如果你描述了你试图解决的整个问题,可能有一个更好的解决方法,不需要延迟。根据我的经验,大多数涉及计时的事情都不好。这是“模糊前鼠标下降”吗行为可靠的跨浏览器?如果是这样,很酷!惊人的解决方案!感谢发布…:DI最终也使用了您的解决方案。这不是最漂亮的解决方案,但它确实有效。此外,您不必使用此解决方案来处理setTimeout。这是一个很好的解决方案,也可以使用iphone mobile safari来防止键盘隐藏。您可能是b取消mousedown事件,而不是设置将事件传播到blur方法期间使用的布尔值。使用
e.preventDefault()取消它
其中
e
是事件处理程序函数的第一个参数。如果您编写了正确的代码,您可能会在接受的答案中胜出。正确的方法是
$(“按钮”).mousedown(函数(evt){evt.preventDefault();})
,这将防止触发模糊事件。
$('button').mousedown(function(){return false;});
btn.addEventListener('mousedown', function (event) {
  event.preventDefault()
})

btn.addEventListener('click', function(ev) {
    input.value += '@'
    input.setSelectionRange(ta.value.length, ta.value.length)
})