我制作了一个包含多个使用该contenteditable
属性的元素的页面。我添加了当您切换到下一个元素时自动选择文本的功能(使用我在这个答案中找到的一个小插件)。
但是,如果您切换到屏幕外的元素,则窗口不会自动滚动以显示该元素(至少在 Chrome 中)。所以我使用了focus
事件并.animate()
跳转到元素。
现在我的问题是,如果单击该元素而不是通过选项卡跳转到该元素,我不想跳转到该元素。当元素已经在视图中时它会变得很烦人,但是当您单击它时会跳转到页面顶部。这是一个小提琴来看看。
这是我正在使用的代码:
$.fn.selectText = function(){
var doc = document;
var element = this[0];
if (doc.body.createTextRange) {
var range = document.body.createTextRange();
range.moveToElementText(element);
range.select();
} else if (window.getSelection) {
var selection = window.getSelection();
var range = document.createRange();
range.selectNodeContents(element);
selection.removeAllRanges();
selection.addRange(range);
}
};
$(document).on('focus', '.content', function(e) {
var top = $(this).offset().top - 100;
$(this).selectText();
$('body').animate({
scrollTop: top
}, 25);
return true;
});
我尝试使用stopPropagation()
和preventDefault()
更改绑定顺序,但无济于事。在单击而不是选项卡上忽略此焦点事件的最佳方法是什么?或者有没有办法恢复原来的自动滚动功能?