js函数在外部调用时不起作用


js function does not work when invoked externally

我知道这很傻,但我想我在最后几个小时内都无法破解它。我写信是为了了解这是如何运作的。我有一个简单的js函数,我希望它保存在一个外部文件中,当从我的.php文件调用时,它就不起作用了。

以下是设置:我有4个独立的php文件,如register.php、dashboard.php、header.php、actions.php

我在script.js中定义了一些函数,比如下面的

function fn1(){
alert("fn1");
} 
function fn2(){
alert("fn2");
}
function fn3(){
alert("fn3");
}

现在,我已经在我的header.php中定义了包含这个脚本文件作为

<!doctype html>
<html>
<head>
 ...
</head>
<body>
 <script src='/js/script.js'></script>
</body>
...

我将这个header.php包含在我的其他php文件中,如

<?php include('header.php'); ?>
<script language="javascript">
fn1();
</script>

这不起作用。上面写着。。

SyntaxError:语法错误脚本.js:1

ReferenceError:fn1未定义dashboard.php

我设置它们并将它们分发到单独的文件中的方式有什么问题吗?

如果我在这些php文件中单独进行本地定义,那么同样的函数也可以正常工作。因此,只有当从外部js脚本调用时,这才是一个问题。

请说明我做错了什么。

我之前写过很多函数,它们都很好用,但我想先了解一下,这样我就可以继续以同样的方式移动这些函数,使它们保持全局性。

我想做什么

我有基于如下视图/操作的PHP文件。。

login.php
register.php
dashboard.php
useraction.php
header.php

有几个div,比如我的导航栏、页脚、侧边栏,对所有这些php都是通用的;header.php具有根据各种条件和事件加载这些div所需的所有js函数;

我的计划是将header.php包含在我的所有php中,这样它中定义的所有函数也包含在每个php文件中,并且公共div由header.php本身加载。

这有道理吗?这是实现这一目标的正确方式吗?如果没有,我该怎么办,请澄清。

因此,根据这个计划,我尝试制作一个简单的js函数,该函数可以保存在外部js中,以便从这些php调用,而这些php不起作用

language已弃用。您应该只使用<script>标记。问题是你的第一行,你应该发布它,发布的代码运行良好,我刚刚测试过。这可能是语法错误。不过,您应该考虑将脚本加载到一个不同的php文件中,而不是一个负责设置标题和导航栏或其他内容的php文件。

编辑:对不起,我说可能是语法错误,而它显然只是:

SyntaxError: syntax error script.js:1

删除"script.js"的第一行,它应该可以工作了。

这让它为我工作:

header.php

<!doctype html>
<html>
<head>
</head>
<body>
<script src='script.js'></script>

main.php

<?php include('header.php'); ?>
<script>
fn1();
</script>

script.js

function fn1(){
    alert("fn1");
} 
function fn2(){
    alert("fn2");
}
function fn3(){
    alert("fn3");
}

编辑2:

突然间,这似乎更像是一个php问题
您的脚本可能应该加载在一个单独的php文件scripts.php中,该文件包含在特定php页面的底部,但在打开<script>标记之前,如果该页面上需要特定的js的话
这样可以更快地加载页面。不过,您可以在头部分中包括特定的脚本,甚至在文档的<head>中也是如此,但您应该尽量保持这些脚本的轻量级,这样它们就不会严重延迟用户
您可以在任何地方包含php。例如,这可能是dashboard.php:

<?php include('header.php'); ?>
<div id="ImOnlyOnThisParticularPage"></div>
<!-- Footer loads scripts after the <footer> or divs that it contains -->
<?php include('footer.php'); ?>
<script>
var iOnlyDoSomethingInThisPage = function()
{
   console.log("debug");
}
</script>
</body>
</html>

@param LoL我复制了您的代码并将其保存在单独的文件中,我得到了预期的警报。如果出现问题,请打开控制台面板并尝试调试。按F12并检查控制台相关的错误,大多数情况下您没有正确的文件路径