簡體   English   中英

JavaScript函數重復多次

[英]A JavaScript function is repeated many times

我有兩個功能print和callPrint在下面。 我點擊通話功能打印第一次是正確的。 但是,當單擊呼叫功能打印第二或第三次時,則函數callPrint將被呼叫2次或3次。 我已對攻擊文件進行調試。

function print(url) {
    console.log('print');
    var _this = this, iframeId = 'iframeprint', $iframe = $('iframe#iframeprint');
    if ($iframe.attr('src') != url) {
        $.when(
            $iframe.attr('src', 'about:blank'),
            $iframe.load(function () {
                console.log($iframe.prop('contentWindow').document.readyState);
            })
        ).done(function () {
            $iframe.attr('src', url);
            $iframe.load(function () {
                console.log('new');
                _this.callPrint(iframeId);
            });
        });
    } else {
        console.log('old');
        _this.callPrint(iframeId);
    }
}

// initiates print once content has been loaded into iframe
function callPrint(iframeId) {
    console.log('callPrint');
    $('div.wait').hide();
    var PDF = document.getElementById(iframeId);
    PDF.focus();
    PDF.contentWindow.print();
    return false;
}

JavaScript函數重復多次

問題是因為每次調用print()時,您要將兩個新的load()事件處理程序附加到iframe 要解決此問題,請添加一個load()事件處理程序,然后從那里調用函數。 每當您更新元素上的src屬性時,都會觸發此操作。 嘗試這個:

var $iframe = $('#iframeprint').load(function() {
  // You'll need to make sure the function is in scope of the handler
  // There's not enough information in the OP for me to show you how
  callPrint('iframeprint'); 
});

function print(url) {
  var _this = this;

  if ($iframe.attr('src') != url) {
    $iframe.attr('src', url);
  } else {
    _this.callPrint(iframeId);
  }
}

謝謝“ Rory McCrossan”。 我在callPrint時添加了setTimeout函數,以便打開對話框打印。 但是目前我不能為你投票。

var $iframe = $('iframe#iframeprint').load(function () {
    // You'll need to make sure the function is in scope of the handler
    // There's not enough information in the OP for me to show you how
    setTimeout(function () {
        callPrint('iframeprint');
    }, 100);
});
function print(url) {
    if ($iframe.attr('src') != url) {
        $iframe.attr('src', url);
    } else {
        console.log('old');
        callPrint('iframeprint');
    }
}

// initiates print once content has been loaded into iframe
function callPrint(iframeId) {
    $('div.wait').hide();
    var PDF = document.getElementById(iframeId);
    PDF.focus();
    PDF.contentWindow.print();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM