0

プロジェクトの場合、PHPコードを使用してドキュメントを印刷する必要があります。現在、印刷を開始するためのセルフクロージングポップアップがあります。

私が抱えている唯一の問題は、ユーザーがボタンをスパムして大量の印刷要求と巨大なキューを作成する可能性があることです。

私が今持っているコード:

function newPopup(url) {
popupWindow = window.open(
url,'popUpWindow','height=10,width=100,left=10,top=10,resizable=no,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no,status=no');    // Verstop op achtergrond
popupWindow.blur();
}
<a href="JavaScript:newPopup('print.php');">Print</a>

リンクを停止するコードをいくつか見つけましたが、すでにポップアップと呼んでいるため、これらの実装に問題があります。

4

3 に答える 3

3

フラグを使用できます。

var flag=true;
function newPopup(url) {
  if(flag) {
    window.open(...).blur();
    flag=false;
    window.setTimeout(function(){flag=true;},5*1000);
  }
}

「良い」解決策ではありませんが (グローバル変数を使用します)、うまくいくはずです。

于 2012-10-18T11:51:16.430 に答える
2

ポップアップを開く前にリンクを無効にして、5秒後に再度有効にすることができます。問題は、リンクを有効/無効にすることは、非常に移植性の高い方法では実行できないことです。これを回避するには、実際のリンクを保存し、偽のリンクに置き換えてから、後で(間隔が経過したときに)再度有効にする必要があります。このような:

function newPopup(url) {
    // Save current link and replace it with a fake one
    var oldLink = $("#linkid").attr("href");
    $("#linkid").attr("href", "#");

    setinterval(function() {
        // Restore true link
        $("#linkid").attr("href", oldLink);
    }, 5000);

    // ...
}

このコードを別の関数temporaryDisableLink(id, timeout)に抽出して、(他のすべてのコードを汚染することなく)多くの異なるリンクで再利用できます。

それでは、他の解決策を見てみましょう。

HTMLコードを次のように更新する必要があります(多くのリンクで同じ関数を再利用する場合、それ以外の場合はリンクIDパラメーターを渡す必要はありません)。

<a id="link-print" 
   href="JavaScript:newPopup('#link-print', 'print.php');">
   Print
</a>

pointer-eventsCSSプロパティはIE(およびOpera)でサポートされていないため、実際に使用することを提案することはできません。とにかくそれは:

function newPopup(id, url) {
    $(id).css("pointer-events", "none");

    setinterval(function() {
        $(id).css("pointer-events", "auto");
    }, 5000);

    // ...
}

JavaScriptを使用してポップアップを開くため、カスタム disabled属性を使用するように(またはpointer-eventsそれらを一緒に使用する予定があるかどうかを確認するために)関数を少し変更することを検討してください。

function newPopup(id, url) {
    if ($(id).attr("disabled") == "disabled") {
        return false;
    }

    $(id).attr("disabled", "disabled");
    setinterval(function() {
        $(id).removeAttr("disabled");
    }, 5000);

    // ...
}
于 2012-10-18T11:53:52.913 に答える
-1
<script>
    function newPopup(url) {
        setTimeout(function () {
            popupWindow = window.open(
url, 'popUpWindow', 'height=10,width=100,left=10,top=10,resizable=no,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no,status=no');    // Verstop op achtergrond
            popupWindow.blur();
        },5000
        );
    }
</script>
<a href="JavaScript:newPopup('print.php');">Print</a>
于 2012-10-18T13:35:01.290 に答える