放置在文本块中时,JavaScript函数不起作用

时间:2018-03-23 作者:John Murphy

我正在尝试包含一个按钮,单击该按钮时,会将文本从文本框复制到剪贴板。我已将以下代码放置在文本块的末尾(在文本视图中)。

Copy the important data using the button below to use in the next step:

<input id="myInput" style="width: 600px;" readonly="readonly" type="text" value="Important Data" />
<button onclick="myFunction()">Copy</button>

<script>
function myFunction() {
  var copyText = document.getElementById("myInput");
  copyText.select();
  document.execCommand(\'copy\')
  alert("Data copied to clipboard");
}    
</script>
该按钮会显示,但单击时不会执行任何操作。为了让Javascript正常工作,我还应该做些什么?

我对web开发(html、javascript)和wordpress都是新手,所以不确定我做错了什么。谢谢你的帮助。

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

它不起作用的主要原因是onclick() 属性不是编辑器中允许的属性。可能是出于安全原因。

另一种方法是在脚本中添加click事件。因此onclick="myFunction()", 添加ID,myButton 单击按钮,然后单击以下行:

var myButton = document.getElementById( \'myButton\' ); 
myButton.addEventListener( \'click\', myFunction );
然而,我遇到了麻烦,因为编辑器出于某种原因在脚本之间添加了div和样式。一种更安全的方法是定制Shortcode.

此代码添加到函数中。php或自定义插件将创建一个短代码,您可以使用它输出HTML和JS,如下所示:

[copy_text]
代码为:

function wpse_298687_shortcode() {
    // Start capturing output to return at the end.
    ob_start();
    ?>

    <input id="myInput" style="width: 600px;" readonly="readonly" type="text" value="Important Data">
    <button onclick="myFunction()">Copy</button>

    <script>
        function myFunction() {
            var copyText = document.getElementById(\'myInput\');
            copyText.select();
            document.execCommand(\'copy\')
            alert(\'Data copied to clipboard\');
        }
    </script>

    <?php
    // Return captured output.
    return ob_get_clean();
}
add_shortcode( \'copy_text\', \'wpse_298687_shortcode\' );
我已经对它进行了测试,效果很好。然而,有很多方法可以改进,我没有详细介绍,以免让人太困惑。

例如,如果多次使用此短代码,它将无法正常工作,因为输入和按钮以及ID和ID不应重复。理想情况下,代码将使用更通用的类。

多次使用它的另一个问题是,您将定义myFunction() 函数多次执行将引发错误。理想情况下,该脚本将存在于由短代码排队的单独文件中,以便所有使用短代码的用户共享一个脚本。这意味着脚本的编写应允许任何给定按钮从任何给定框复制文本。可能通过数据属性或共享父级。

这一切都变得相当复杂,所以现在只需关注使用短代码创建文本片段的能力,这些文本片段可用于从其他地方调用代码,这样它就不会受到编辑器的干扰。

结束

相关推荐

不只包括在主页上的JavaScript文件

我在加载自己的javascript文件时遇到问题,这个问题只出现在主页上,在其他页面上也可以。现在我对交互性有问题,因为只有在主页上我才能做到这一点。内部功能。php我以这种方式包含了自己的脚本: function monaco_assets_js(){ wp_enqueue_script(\'script\', get_stylesheet_directory_uri() . \'../js/script.js\', array(\'jquery\'), \'1.0.0\