如何为打印窗口中的按钮添加href属性?无法定位该按钮
解决打印窗口按钮添加跳转功能的问题
你当前的核心问题是:新窗口写入HTML后立刻触发打印,DOM还未完全解析就执行了后续操作,导致无法定位按钮。另外需要注意,<button>标签本身并不具备href属性,若要实现跳转,要么将按钮替换为<a>标签,要么给按钮添加点击事件来实现跳转逻辑。
以下是调整后的代码,重新梳理了Print函数的执行顺序,确保先完成DOM操作再触发打印:
function PrintOrder(id) { $.ajax({ type: 'POST', url: '/PaymentTracking/PrintOrderNewAdvance', data: "{id: '" + id + "'}", contentType: "application/json; charset=utf-8", dataType: 'json', success: function (result) { Print(result); }, error: function () { // 可在此添加错误提示逻辑 } }); } function Print(html) { var newWin = window.open('', 'Print-Window'); // 先写入基础HTML结构,暂不触发打印 newWin.document.write('<html><body>' + html + '</body></html>'); newWin.document.close(); // 等待新窗口DOM加载完成后再操作元素 newWin.onload = function() { // 定位目标按钮,替换为你实际的选择器(如id/class),示例用class选择器 var targetBtn = newWin.document.querySelector('.print-operation-btn'); if (targetBtn) { // 方案1:给<button>添加点击跳转事件 targetBtn.addEventListener('click', function() { newWin.location.href = '/你的目标跳转地址'; // 替换为实际URL }); // 方案2:将<button>替换为<a>标签(若需要原生href属性) // var link = newWin.document.createElement('a'); // link.href = '/你的目标跳转地址'; // link.textContent = targetBtn.textContent; // link.className = targetBtn.className; // targetBtn.parentNode.replaceChild(link, targetBtn); } // DOM操作完成后触发打印 newWin.print(); // 可选:打印完成后延迟关闭窗口 // setTimeout(function () { newWin.close(); }, 1000); }; }
关键修改说明:
- 移除了原代码中
body标签的onload="window.print()",改为监听新窗口的onload事件,确保DOM完全渲染后再执行元素操作。 - 使用
newWin.document.querySelector()定位按钮,你需要根据打印界面中按钮的实际标识(如id="back-btn"或class="print-btn")修改选择器。 - 针对
<button>无href属性的问题,提供了两种实现跳转的方案,可根据需求选择。
内容的提问来源于stack exchange,提问作者Yunus Mert Çakar
相关产品推荐
相关产品推荐

