简单的Javascript无法在Wordpress / WooCommerce插件中运行

时间:2013-12-11 14:59:13

标签: javascript php jquery wordpress woocommerce

下面的代码是一个简单的插件,它为wooCommerce产品页面(前端)添加了一个新标签,然后向该标签添加了一个按钮。我想要它做的是在单击按钮时弹出警报。我知道,这非常简单,但我创建它是为了试图弄清楚为什么更复杂的脚本无效。

到目前为止,标签存在,并且按钮存在,但是当我点击按钮时没有任何反应。我已检查以确保脚本实际上已加载,并且我已确认它确实存在于页面的源代码中。如果我直接在浏览器中从源代码加载javascript文件路径,它会显示正确的代码。

此外,如果我使用javascript代码和按钮创建一个简单的html文件(因此没有任何wordpress的东西),它的效果非常好。

此外,我已经在php文件中直接添加了一个简单的警告命令到html输出,这也可以正常工作。

这让我相信这个问题与ID有关,但我不知道该怎么做。

这是php文件(为清晰起见,减去插件标题):

<?php

//runs addScripts
add_action( 'wp_enqueue_scripts', 'addScripts' );

// enqueues jquery and test1.js files. Inspecting html shows these are loaded.test1.js is loaded in footer.
function addScripts(){
    wp_enqueue_script( 'jquery', plugins_url( 'jquery.js', __FILE__ ));
    wp_enqueue_script( 'test1', plugins_url( 'test1.js', __FILE__ ),array('jquery'),1,true);
}

// creates new tab in woocommerce
add_filter( 'woocommerce_product_tabs', 'woocommerce_product_custom_tab' );

// function defining test_tab   
function woocommerce_product_custom_tab($tabs) {
    $tabs['test_tab'] = array(
        'title' => __( 'New Product Tab', 'woocommerce' ),
        'priority' => 50,
        'callback' => 'woo_new_product_tab_content'
    );
    return $tabs;
}

// content of new tab, and where the javascript is supposed to work.        
function woo_new_product_tab_content() {

echo <<<END

<button id="mybutton" type="button">Click Me</button>

<script type="text/javascript" src="test1.js"></script>

<script type="text/javascript">
<!--test1();//--></script>

<script type="text/javascript"> alert('ALERT!') </script>
END;
}
?>

这是包含javascript函数的test1.js:

function test1(){
    $( "#mybutton" ).click(function( event ) {
        alert ('Hello')
    });
}

test1.js中的#mybutton是否可能没有将该函数引导到php / html中的'mybutton'按钮?

感谢您的帮助!


更新:我现在在php echo中使用以下功能按钮:

<script type="text/javascript"> 
jQuery(document).ready(function($) {
$( "#mybutton" ).click(function( event ) {
alert ('Hello')});
 });
 </script>

但以下不起作用:

<script type="text/javascript"> 
jQuery(document).ready(function($) {
test1(); });
 </script>

使用之前的test1.js。


更新2

因此,虽然下面的答案最终得到了代码的工作,但这个试验的更复杂的东西却失败了。通过执行以下操作,我终于让它工作了(这可能不是最优雅的解决方案):

add_action('wp_head', 'DPG_execute_script');

function DPG_execute_script()  {

?>

<script type="text/javascript">
jQuery(document).ready(function($) {

// javascript goes here.

}); 
</script>
<?php

 }

我无法使用echo&lt;&lt;

2 个答案:

答案 0 :(得分:2)

如果您在wordpress中使用jQuery函数,则必须通过以下方式之一使用它:

  • 如果您希望在加载文档后执行代码:

    jQuery(document).ready(function($) {
         // Code here will be executed on document ready. Use $ as normal.
    });
    
  • 如果要在匿名函数中执行代码,请确保将jQuery作为参数传递:

    (function($) {
        // Your jQuery code goes here. Use $ as normal.
    })(jQuery);
    

编辑: 这就是我实现代码的方式:

<button id="mybutton" type="button">Click Me</button>

<script type="text/javascript"> 
    jQuery("#mybutton").click(function() {
        alert ('Hello')
        });
</script>

重要提示:必须在按钮后调用脚本!

答案 1 :(得分:1)

只需使用此代码(确保首先调用jquery):

<button id="mybutton" type="button">Click Me</button>

<script>    
$( "#mybutton" ).click(function( event ) {
alert ('Hello');
});
</script>

成功测试:http://jsfiddle.net/k664U/