我的jQuery已正确入队。那么,为什么它不起作用呢?

时间:2013-02-20 作者:sanjaypoyzer

我只是想给一个子主题添加一点简单的显示/隐藏jQuery。

$(document).ready(function(){
 $("#openbtn").click(function(){
  $("#openingtimes").toggle(300);
 });
});
我已将上述代码保存在一个名为buttons.js.

然后,我在我的functions.php 文件:

<?php
 if ( !is_admin() ) {
 wp_register_script(\'buttons\',
   get_bloginfo(\'stylesheet_directory\') . \'/buttons.js\',
   array(\'jquery\'),
   \'1.0\' );

 wp_enqueue_script(\'buttons\');
 }
 ?> 
在输出的源代码中,脚本似乎已正确加载。

<script type=\'text/javascript\' src=\'http://localhost:8888/italina/wp-includes/js/jquery/jquery.js?ver=1.8.3\'></script>
<script type=\'text/javascript\' src=\'http://localhost:8888/italina/wp-content/themes/italina-responsive-child/buttons.js?ver=1.0\'></script>
但是按钮没有作用。

为了更好地衡量,以下是它应该影响的HTML:

<button id="openbtn">Opening Times</button>
        <div id="openingtimes" class="headboxes">
                <p>
                   Mondays: Closed<br />
                   Tues-Fri: Noon-3pm; 5.30pm-10pm<br />
                   Sat-Sun: Noon-10.30pm<br />
                </p>
        </div>
非常感谢您的帮助。

2 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

WordPress中的jQuery脚本require no-conflict wrappers.

而不是这样:

$(document).ready(function(){
     $(#somefunction) ...
});
使用此选项:

jQuery(document).ready(function($) {
    // $() will work as an alias for jQuery() inside of this function
});
因此,在您的情况下:

jQuery(document).ready(function($) {
    $("#openbtn").click(function(){
        $("#openingtimes").toggle(300);
    });
});

SO网友:helgatheviking

我还将您的功能更改为:

function wpa_87661(){
 wp_enqueue_script(\'buttons\',
   get_bloginfo(\'stylesheet_directory\') . \'/buttons.js\',
   array(\'jquery\'),
   \'1.0\' );
}
add_action(\'wp_enqueue_scripts\',\'wpa_87661\');
所以你enqueue your script on the wp_enqueue_scripts hook as recommended in the Codex.

如果您有Chrome或Firebug,请使用控制台检查Javascript错误。

结束