<input type="text" />
和
$('input').blur(function(){
alert('stay focused!');
});
我想通过点击一个锚元素来阻止模糊功能在我“模糊”时运行。
即。如果我选择另一个输入,点击页面上的某个地方等我想要模糊,但如果我点击一个链接,我不希望它开火。
这是否可以轻松实现,还是我需要与代表和信号量进行黑客攻击?
由于
答案 0 :(得分:50)
我今天也必须自己解决这个问题。我发现mousedown事件在模糊事件之前触发,因此您需要做的就是设置一个变量,指示首先发生了mousedown事件,然后再适当地管理模糊事件。
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;
});
希望这可以帮助你!!
答案 1 :(得分:21)
如果您想将光标保持在contenteditable
元素中的位置,只需:
$('button').mousedown(function(){return false;});
答案 2 :(得分:7)
稍微延迟模糊。如果查看者单击指向另一个页面的链接,则该页面应在此代码有机会运行之前更改:
$('input').blur(function(){
setTimeout(function() {alert('stay focused!');}, 1000);
});
您可以试验超时的延迟值是否合适。
答案 3 :(得分:0)
您可以通过在被单击的控件的preventDefault()
事件中调用mousedown
来获得此行为(否则将获得焦点)。例如:
btn.addEventListener('mousedown', function (event) {
event.preventDefault()
})
btn.addEventListener('click', function(ev) {
input.value += '@'
input.setSelectionRange(ta.value.length, ta.value.length)
})