调用外部js文件中的函数

时间:2017-02-13 作者:user123

测验php

<div id="widget_dta"></div> 
<script type="text/javascript" src="widget.js"></script>
<script type="text/javascript">
    init_widget(\'john\',\'robert\');
</script>
小部件。js公司

 (function() {

 // Localize jQuery variable
 var jQuery;

 /******** Load jQuery if not present *********/
   if (window.jQuery === undefined || window.jQuery.fn.jquery !== \'1.4.2\') {
var script_tag = document.createElement(\'script\');
script_tag.setAttribute("type","text/javascript");
script_tag.setAttribute("src",
    "https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js");
if (script_tag.readyState) {
  script_tag.onreadystatechange = function () { // For old versions of IE
      if (this.readyState == \'complete\' || this.readyState == \'loaded\') {
          scriptLoadHandler();
      }
  };
} else { // Other browsers
  script_tag.onload = scriptLoadHandler;
}
// Try to find the head, otherwise default to the documentElement
(document.getElementsByTagName("head")[0] ||   document.documentElement).appendChild(script_tag);
} else {
// The jQuery version on the window is the one we want to use
jQuery = window.jQuery;
main();
}

/******** Called once jQuery has loaded ******/
function scriptLoadHandler() {
// Restore $ and window.jQuery to their previous values and store the
// new jQuery in our local jQuery variable
jQuery = window.jQuery.noConflict(true);
// Call our main function
main(); 
}

/******** Our main function ********/
function main() { 
  jQuery(document).ready(function($) {
     function init_widget(fname,lname) {
        $(\'#widget_dta\').append(\'<p class="fname">first name :\'+fname+\'</p><p class="lname">last name :\'+lname+\'</p>\');
   }
}); 
 }

 })(); 
错误:我收到此错误“ReferenceError:未定义init\\u小部件”。我做错了什么,谁能帮忙。

2 个回复
SO网友:Anwer AR

我认为script.js 文件加载不正确。如果加载,则函数应按预期工作。

是否在脚本中引用脚本的完整路径。js呼叫?喜欢

<script type="text/javascript" src="some-domain.com/path/widget.js"></script>
尝试从页面源打开该文件,看看它是否加载了正确的js文件?

它始终是使用的最佳实践wp_enqueue_script 用于加载js文件的函数。

SO网友:Mikepote

你的init_widget 从内部看不到函数test.php.

你必须init_widget 功能全局可见性:

/******** Our main function ********/
function main() { 

  window.myutils = window.myutils || {}; //Create a little namespace for your own functions so that they are not all global.

  //We dont need the jQuery on ready block here. You should assume that whoever calls init_widget will wait for the page to be ready first before calling.
  window.myutils.init_widget = function(fname,lname) {
        var $ = jQuery; //convenience so we can still use $ here instead of writing out jQuery all the time.
        $(\'#widget_dta\').append(\'<p class="fname">first name :\'+fname+\'</p><p class="lname">last name :\'+lname+\'</p>\');
  };
}
然后在你的test.php 执行此操作所需的文件:

<div id="widget_dta"></div> 
<script type="text/javascript" src="widget.js"></script>
<script type="text/javascript">
    jQuery(document).ready(function($) {
        window.myutils.init_widget(\'john\',\'robert\');
    });
</script>
您的widgets.js 文件应该只定义可以直接调用的所有函数。只有实际需要使用这些函数的代码才应该等待jQuery on page ready事件首先触发,然后再尝试使用任何小部件函数。

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请