javascript - 通过js添加HTML元素时阻止IE跳转到页面顶部

标签 javascript jquery html internet-explorer

我有一个带有 ASP:Grid 的页面,每行都有一个小复制按钮,用于复制单元格内的文本。为了复制文本,我编写了以下 JavaScript 函数:

var copyText = function (p_text) {
  $(".copy").append("<textarea id='test'></textarea>");
  $("#test").val(p_text);
  var cutTextarea = document.querySelector("#test");
  cutTextarea.select();
  document.execCommand("copy");
  $("#test").remove();
}

它在 Firefox 和 Chrome 中运行得非常好。复制也适用于 IE11,只是它总是跳到页面顶部,这确实很烦人。在 Firefox 和 Chrome 中,它停留在滚动位置。 我看到了一些类似的问题,并尝试在附加文本区域之前保存当前位置,并在函数末尾滚动到以下几行:

var selectTop = $("body").offset().top;
$("body").scrollTop(selectTop);

$("body").offset().top 返回 0,因此它不起作用。 我找到了一些其他可能的解决方案,但无法实现它们,因此它们适用于我的案例。希望有人能给我一个可行的解决方案:)

提前致谢!

最佳答案

我只是在寻找类似的答案(也具有复制/粘贴功能)时偶然发现了这个问题,所以即使它已有大约 3 年的历史,以下是我最终设法解决它的方法:

我很幸运(我猜?)在我的页面中有一个可访问的位置:固定div。因此,我创建的元素确保设置为零大小,并将其附加到该固定 div,这意味着不会发生滚动。最终结果是这样的:

function copyStringToClipboard(str) {
    var el = document.createElement('textarea');
    el.value = str;
    el.setAttribute('readonly', '');
    el.style = { position: 'fixed', height: 0, width: 0, padding: 0, margin: 0 };
    //create in position: fixed element to avoid re-scrolling the page in IE11
    var container = document.getElementById("fixed-position-div"); 
    container.appendChild(el);
    el.select();
    document.execCommand('copy');
    container.removeChild(el);
}

我希望可以帮助别人!

关于javascript - 通过js添加HTML元素时阻止IE跳转到页面顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42339839/

相关文章:

javascript - jQuery 不适用于每个 div 的幻灯片

jquery - '数据:image/jpg;base64' and jQuery image preview in Internet Explorer

html - 在 div 下 float 文本

java - 从具有属性的 JSoup <a> 标记中提取链接

javascript - 如何构建一个简单的网络切换?

javascript - 无法更改图像的位置

javascript - 序列化一个javascript数组

javascript - 如何从用户悬停的行中获取第一个单元格?

javascript - Canvas 混合不起作用

javascript - 在 html 页面上使用 javascript 动态添加剑道下拉列表