【问题标题】:How do you call a JS function in an html file如何在html文件中调用JS函数
【发布时间】:2018-12-03 06:44:40
【问题描述】:

我目前有这个功能:

<script>
        function firebase_database(){
          var docRef = firebase.collection("signs").doc("PuA9s68iuxBnJo7PEezC");
          docRef.get().then(function(doc) {
              if (doc.exists) {
                  console.log("Document data:", doc.data());
              } else {
                  // doc.data() will be undefined in this case
                  console.log("No such document!");
              }
          }).catch(function(error) {
              console.log("Error getting document:", error);
          });
        }
        </script>

我尝试用

调用它
<script> firebase_database() </script>  

但我明白了

(index):823 Uncaught TypeError: firebase.collection is not a function
    at firebase_database ((index):823)
    at (index):836

SN:第一次接触 JS

【问题讨论】:

  • firebase_database()
  • 该函数需要以某种方式被调用或触发。如果您希望它在加载特定元素时运行,您可以使用onReady 事件回调,绑定到特定的 HTML 元素。这只是一个例子,请澄清您的问题。
  • 问题似乎与您在 head 部分中加载相关文件的方式或其他方式有关。您必须先加载依赖项才能使用它们。
  • 我希望它在网站加载后立即运行。我试过 firebase_database();但我不断收到(index):823 Uncaught TypeError: firebase.collection is not a function at firebase_database ((index):823) at window.onload ((index):839)
  • 你的函数调用了另一个不存在的函数——至少不在当前范围内。

标签: javascript


【解决方案1】:

可以在触发事件或页面准备好或加载时调用该函数。后者已在以下解决方案中实现

<script> 
window.onload = function() {
 firebase_database() ;
};
</script> 

【讨论】:

  • 我不断收到(index):823 Uncaught TypeError: firebase.collection is not a function at firebase_database ((index):823) at window.onload ((index):839)
【解决方案2】:

你不能只声明函数名——这样称呼它:

<script>firebase_database()</script>

如果您愿意,可以在窗口加载后调用它:

<script>
    window.onload = function() {
        firebase_database()
    };
</script>

【讨论】:

    【解决方案3】:

    你可以像下面这样简单地调用它

    <script>
      firebase_database();
    </script>
    

    如果函数写在任何其他 JS 文件中,那么您需要在函数初始化之前将该文件链接到 HTML 文件。

    【讨论】:

    • 我不断收到(index):823 Uncaught TypeError: firebase.collection is not a function at firebase_database ((index):823) at window.onload ((index):839)
    • 在这种情况下,你应该检查这个stackoverflow.com/questions/49635868/…
    【解决方案4】:

    您可以通过多种方式调用 JavaScript 函数。

    首先你应该确定你想要一个函数在什么条件下被执行?当你的 html 文档是ready?而onload?而onclick?而onchange?以此类推。

    您的错误背后的原因: 该错误与您的函数调用机制无关。

    var docRef = firebase.collection("signs").doc("PuA9s68iuxBnJo7PEezC");

    问题出在上面突出显示的行上。

    所以如果你只是想内联加载你的 JavaScript 函数(一种正常的方式):

    <script>
    (function your_function() {
      //alert("loaded");
    })();
    </script>
    

    另一种方式:

     <script>
      function your_function() {
         //alert("loaded");
      }
      your_funtion();
     </script>
    

    您可以像其他答案一样使用 HTML 属性(如 onclick、onload、onchange)来加载您的函数。

    【讨论】:

      【解决方案5】:

      当您在这样的脚本中定义一个函数时,您必须稍后调用它。

      考虑以下几点:

      <script>
        var st = new Date();
      
        function helloWorld() {
          var ct = new Date();
          console.log("Hello World", (ct - st));
        }
      </script>
      <div>
        <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/3/3d/LARGE_elevation.jpg/1280px-LARGE_elevation.jpg?" />
      </div>
      <script>
        var img = document.getElementsByTagName("img");
        img.onload = helloWorld();
      </script>

      当我们加载 &lt;script&gt; 元素时,它们可以执行我们之前定义的代码。

      更新

      您报告的错误是指这段代码:

      var docRef = firebase.collection("signs").doc("PuA9s68iuxBnJo7PEezC");
      

      基本上是说firebase没有定义;因此,firebase.collection() 不是定义的函数。在调用此代码之前,您需要检查您的代码并确保它被正确使用并定义了所有正确的库。

      希望对您有所帮助。

      【讨论】:

        【解决方案6】:

        页面加载完毕后调用firebase_database()函数。

        如果您没有在标头中引用 firebase 脚本,请先链接它。

        如果您已经这样做了,请确保在引用之后调用 firebase_database()。

        无论如何,事件“DOMContentLoaded”监听器将确保所有脚本都已加载 包含带有 src 引用的外部脚本。

        <script>
            document.addEventListener('DOMContentLoaded', function() {
                firebase_database();
            }, false);
        </script>
        

        但也有例外,如果外部脚本包含 async 或 defer 属性,它会告诉浏览器继续处理而不等待脚本。在这种情况下,您可以理想地使用 window.onload 在页面生命周期中最后触发的地方。

        <script>
          window.onload = function() {
            firebase_database();
          };
        </script>
        

        并从您的脚本标签中删除此代码

         <script> firebase_database() </script>
        

        【讨论】:

          【解决方案7】:

          你可以试试

          window.onload = function() {
           firebase_database() ;
          };
          <script src="myscript.js"></script>
          

          【讨论】:

          • 括号中的脚本将在 HTML 文件中,而您要调用的实际函数在“myscript.js”文件中
          猜你喜欢
          • 1970-01-01
          • 2012-10-14
          • 2021-08-21
          • 2019-01-23
          • 2017-09-18
          • 2018-08-20
          • 1970-01-01
          • 1970-01-01
          • 2021-08-23
          相关资源
          最近更新 更多