编辑:我正在重塑整个问题。
问题的背景更复杂,但为了简化,假设我想覆盖一些默认的滚动动画。
为此,我创建了一个函数filterKeys() - 过滤'滚动键'(PgUp,PgDn,向上和向下箭头等)。我将给你留下一段带有该函数的代码(正如我所说的上下文更复杂)。
// Determines what type of scroll will be done depending on the key pressed.
function filterKeys(e) {
// If there's already a key associated with a scrolling animation pressed, or there's an animation running: return without doing anything.
if (isPressed || isRunning)
return;
var keyMatch = false; // It will only call any function if the key pressed matches one of the key codes in the array.
$.each(keyCodes, function (index, value) {
if (e.which == keyCodes[index]) {
keyMatch = true;
return false; // It's tantamount to a break statement on a regular loop.
}
});
if (keyMatch) {
e.preventDefault();
currentKey = e.which;
switch (e.which) {
case 40: // Down arrow key.
animateRegularScroll(e, 'down', 190);
break;
case 38: // Up arrow key.
animateRegularScroll(e, 'up', 190);
break;
case 34: // PgDn key.
animatePageScroll(e, 'down', 190);
break;
case 33: // PgUp key.
animatePageScroll(e, 'up', 190);
break;
case 35: // End key.
animateFullScroll(e, 'down');
break;
case 36: // Home key.
animateFullScroll(e, 'up');
break;
case 1: // Primary mouse button.
if ($(this).hasClass('bottom') || $(this).hasClass('top'))
animateRegularScroll(e, $(this).hasClass('bottom') ? 'down' : 'up', 190);
break;
case 2: // Middle mouse button.
animateMMScroll(e);
break;
}
}
}
现在,除了必须按住向上或向下箭头键的动画之外,动画将会顺利进行。那个人会在IE11中口吃。
一个简化的小提琴(它做得不好,有很多东西丢失,但它有用):https://jsfiddle.net/LLu0esue/15/。 尝试用IE11,你会看到口吃。尝试使用Chrome或Firefox,它会很顺利。
问题是如果我把e.preventDefault()放在filterKeys()的第一行,它也会在IE11上顺利进行。 (和以前一样小提琴,但开头是e.preventDefault():https://jsfiddle.net/LLu0esue/17/)。
显然这种行为是不受欢迎的,因为我会阻止Ctrl + T打开新标签,刷新F5等等。我不希望这样。
关于IE11为何如此表现的任何想法?