0

我正在尝试为客户端编辑一个 Wordpress 插件,该插件用于通过使用自定义 javascript 函数打印 div 的内容来打印优惠券。该插件由短代码调用:

[print-button target='div#foo']

目标是一个容器 div 的 css ID,其中一张优惠券的 jpg 是唯一的内容。当您单击生成的“打印”按钮时,会打开一个窗口并显示 jpg 的打印对话框。在页面上使用此插件的一个实例可以完美运行,但是当您有两个或更多实例时,在新打印窗口中打开的唯一 jpg 是页面上的最后一个。这是插件代码:

add_shortcode("print-button", "sc_show_print_button");

function sc_show_print_button($atts, $content = null){

    $target_element = $atts['target'];

    if($target_element == ''){$target_element = "document.body";}

    $output = "<input id=\"coupon\" type='button' onClick='return pop_print()' value='Print Coupon'/>


    <script type='text/javascript'>
    function pop_print(){
        w=window.open(null, 'Print_Page', 'scrollbars=yes');
        w.document.write(jQuery('$target_element').html());
        w.document.close();
        w.print();
    }
    </script>";


    return  $output;
}

我在函数末尾回显了 $target_element 变量,它确实正确列出了每个“目标”变量。我只是无法弄清楚为什么当您单击每个其他实例的“打印”按钮时只显示最后一个实例的图像。我假设它在我没有看到的 javascript 中很简单。

我不是这个插件的原作者,联系他们不是一种选择。

谢谢您的帮助。

4

1 回答 1

1

因为,当您有多个“按钮”实例时,您有多个使用静态代码定义的函数“pop_print”。当然,最后一个函数总是执行。

尝试将目标元素作为函数“pop_print”的参数发送。

例子:

add_shortcode("print-button", "sc_show_print_button");

function sc_show_print_button($atts, $content = null){

    $target_element = $atts['target'];

    if($target_element == ''){$target_element = "document.body";}

    $output = "<input id=\"coupon\" type='button' onClick='return pop_print(\'$target_element\')' value='Print Coupon'/>


    <script type='text/javascript'>
    function pop_print(target_element){
        w=window.open(null, 'Print_Page', 'scrollbars=yes');
        w.document.write(jQuery(target_element).html());
        w.document.close();
        w.print();
    }
    </script>";


    return  $output;
}

当然,尝试将插件中的函数替换为外部 js 文件。

于 2013-05-21T07:03:43.987 回答