根据这个答案,我尝试创建一个页面,如果输入字段获得焦点而不是高度缩小到足够小,页面将无法滚动。如果输入字段失去焦点,那么所有内容都会恢复到原始状态。
我在没有事件的情况下尝试了这种技术,只通过控制台输入代码,它就像一个魅力,但在我将这些绑定到事件之后,一切都被毁了。我意识到,当我点击输入字段并执行绑定函数后,输入字段立即失去焦点。它将 记录bind
到控制台,但不会unwrap()
也不会更改scrollLocked
' 的值,因此在下一次单击它时wrap()
会<div>
再次出现多个。
我对这种行为的猜测是,在焦点之后,DOM 尚未创建,但它立即变得模糊,并且执行得如此之快,以至于它尝试unwrap()
使用尚不存在的 DOM 元素。这个理论中唯一的缺陷是,在第二次或无数次点击之后,会有很多height-helper
s 但仍然没有unwrap()
。
现场演示
HTML
<input type="text" id="search-text">
<div id="spacer" style="height:1500px;"></div>
JavaScript/jQuery
var scrollLocked = false;
$(document).on('focus', '#search-text', function(){
if (!scrollLocked){
scrollLocked = true;
$('body').wrapInner(
$('<div id="height-helper"/>').css({
height: 300,
overflow: 'hidden'
})
);
}
});
$(document).on('blur', '#search-text', function(){
console.log('blur');
$('#height-helper').contents().unwrap();
scrollLocked = false;
});
为什么输入字段会立即失去焦点,为什么unwrap()
即使多次单击后模糊的功能也没有?有没有办法实现我所描述的?