Javascript 如何通过单击将内容打印多次?
我希望当有人单击“打印”时,此iframe可以打印多次。这是我到目前为止得到的,但它只打印了一次。有人有什么建议吗?提前谢谢Javascript 如何通过单击将内容打印多次?,javascript,jquery,printing,Javascript,Jquery,Printing,我希望当有人单击“打印”时,此iframe可以打印多次。这是我到目前为止得到的,但它只打印了一次。有人有什么建议吗?提前谢谢 $("#printing").on('click',function(){ var printYesNo = 1; alert("hi"); for(var count = 1; count < 3; count++) {
$("#printing").on('click',function(){
var printYesNo = 1;
alert("hi");
for(var count = 1; count < 3; count++) {
$('body').append('<iframe src="flyer.php?userNow='+count+'" id="printIFrame" name="printIFrame"></iframe>');
$('#printIFrame').bind('load',
function() {
window.frames['printIFrame'].focus();
window.frames['printIFrame'].print();
}
);
}
});
您为每个元素指定了相同的ID和名称,然后集中打印等。这似乎是错误的,如果稍有不同,将在某些浏览器中触发多个打印对话框打印iFrame而不是跨浏览器打印:
$("#printing").on('click', function () {
for (var count = 1; count < 13; count++) {
(function(k) {
$('<iframe />', {
id : 'printIFrame' + k,
name : 'printIFrame' + k,
on : {
load: function() {
this.contentWindow.focus();
this.contentWindow.print();
}
},
src : 'flyer.php?userNow=' + k,
}).appendTo('body');
})(count);
}
});
您正在添加多个具有相同值的id,因此HTML将无效,jQuery将无法识别元素列表,而只能识别第一个匹配的元素。因此第一个iframe。@LightStyle,您的意思是将其从id=printIFrame更改为class=?是的,这是一个解决方案。否则,您可以使用iframe[name='printIFrame']作为jQuery选择器来选择所有iframe。但类肯定是更好的选择。使用类或在id中添加数字。如果使用类,则不需要在for循环中绑定onload函数。只需注意,在您的情况下,最好使用$document.on'load','.printIFrame',函数{…};因为它们是动态添加的元素。这实际上大部分是有效的。唯一的问题是,当我增加计数时,唯一要打印的页面是第一个数字和最后一个数字。有什么想法吗?那似乎没什么改变,所以我收回了。这个循环在firefox中似乎工作正常,但在chrome中,它只打印第一个和最后一个id。@gotguts-似乎很奇怪,我使用chrome,所有打印对话框都打开了,k的值似乎正确?我想你在onload函数中有这个函数,然后有一个非常基本的主体,对吗?我一辈子都不明白为什么我会得到一个和你不一样的结果。