让我说我这样做:
$('field').addEvents ({
'focus' : function() { // do some stuff }
'blur' : function() { // do other stuff }
});
这是我所有文本输入字段的默认行为。我现在想做的就是这样的事情
<button id='shinyButton' name='shinyButton'>Poke Me</button>
然后:
$('shinyButton').addEvent('click', function() {
stopDefaultBlurFunctionInCurrentlyFocussedField();
// do seriously cool stuff
if (finishedDoingSeriouslyCoolStuff) {
$('field').focus(); // return focus to input field
}
}
这样:
1)我如何stopDefaultBlurFunctionInCurrentlyFocussedField();?
2)我怎么知道我是否真的完成了DoingSeriouslyCoolStuff?
答案 0 :(得分:0)
严格地说,由于blur
事件在您的点击处理程序之前触发,您无法执行您想要执行的操作。
Dimitar建议在鼠标悬停时禁用该事件对鼠标用户有效,但可以防止用户使用键盘触发按钮。
一个选项(但有点破解)是在blur
事件处理程序中引入一个小延迟,并使用变量标志来控制事件触发(你可能需要调整延迟,所以它是不知不觉但仍足够长的时间用于您的目的:
var disableBlurMethod = false;
$('field').addEvents ({
'focus' : function() { // do some stuff }
'blur' : function() {
(function() {
if (!disableBlurMethod) {
// do some stuff
}
}).delay(50);
}
});
$('shinyButton').addEvent('click', function() {
disableBlurMethod = true;
// do seriously cool stuff
if (finishedDoingSeriouslyCoolStuff) {
disableBlurMethod = false;
$('field').focus(); // return focus to input field
}
}