从HTM执行JS函数
Execute JS function from HTM
我写了一个小函数来显示页面上的当前星期几
function displayDay(){
var d = new Date();
var dy = d.getDay();
var day = "Day";
switch(dy){
case 0:
day = "Sunday";
break;
case 1:
day = "Monday";
break;
case 2:
day = "Tuesday";
break;
case 3:
day = "Wednesday";
break;
case 4:
day = "Thursday";
break;
case 5:
day = "Friday";
break;
case 6:
day = "Saturday";
break;
}
document.getElementById("display-day").innerHTML = day;
}
displayDay();
Html:Enjoy the rest of your <span id="display-day"></span>
它工作,但在其他页面,没有span#display-day
, innerHTML
抛出一个错误,并阻止在js文件中执行进一步的功能。
我试图从HTML中执行函数,所以只有一个页面执行这个函数,但它不工作。下面是添加到html
中的代码<script>
displayDay();
</script>
和displayDay();
当然是从JS文件中删除的。但是它不工作,我找不到任何资源来解释如何以这种方式执行函数,所以如果有人能指导我,我会很感激。
您可以添加如下条件语句:
var element = document.getElementById("display-day");
if (element) {
element.innerHTML = day;
}
document.getElementById
如果没有找到,则返回null
像这样修改你的脚本标签:
<script>
if( document.getElementById("display-day") ) displayDay();
</script>
Just put condition
if(document.getElementById("display-day")){
document.getElementById("display-day").innerHTML = day;
}
不能正常工作可能有三个原因:
- html中的脚本在 js文件之前执行,因此
displayDay
尚未定义。确保在脚本执行之前声明了函数。 -
displayDay
没有在全局作用域(即窗口)中定义,因此它不能在其容器外访问。var
在javascript中是函数作用域,这意味着displayDay
是在另一个函数中创建的(这是非常典型的,以避免用脚本的变量污染全局作用域)。要确保displayDay在任何地方都可以访问,请将其定义在任何englobing函数之外或将其附加到window
对象:window.displayDay = displayDay;
。 - 在浏览器实际创建span之前,您试图更新span的内容。为了避免这种情况,请将脚本放在页面的末尾或等待
onload
事件。
这是一个工作的jsfile。
Enjoy the rest of your <span id="display-day"></span>
<script>
// Replace this script by your js file inclusion.
// It would also work if you put it in the header though it is usually better
// to append all your scripts at the end of the body to avoid delaying the
// page rendering.
(function(){
function displayDay(){
var d = new Date();
var dy = d.getDay();
var day = "Day";
switch(dy){
case 0:
day = "Sunday";
break;
case 1:
day = "Monday";
break;
case 2:
day = "Tuesday";
break;
case 3:
day = "Wednesday";
break;
case 4:
day = "Thursday";
break;
case 5:
day = "Friday";
break;
case 6:
day = "Saturday";
break;
}
document.getElementById("display-day").innerHTML = day;
}
// displayDay is still only accessible on the parent anonymous function here.
window.displayDay = displayDay;
// now we attached it to window so it is accessible everywhere.
}());
</script>
<script>
// This is after the span declaration so I could just execute displayDay.
// However it is good practice to avoid DOM manipulation while
// the onload event hasn't been received yet.
window.addEventListener("load", displayDay);
</script>
相关文章:
- 为什么我的控制器没有启动函数.js脚本
- 在函数js中传递变量
- 如何在单独的文件中调用函数 js.
- 在铯中调用函数.js当事件被尝试时
- 只有setTimeout执行函数.JS
- 为什么图像选择器程序中的这个函数 js 不起作用
- 获取邮件中的信息.php从函数.js解析为manage.html
- 如何从应用程序中调用JS函数.js在Rails4视图中
- Uncatch TypeError: obj.attr 不是函数 JS
- 从 C++ 节点调用 JavaScript 函数.js扩展
- 调用 Backbone 内部的外部函数.js的视图初始化方法
- 如何使用 Scala 创建 JavaScript 函数.js
- 使用带有下划线循环的回调函数.js骨干.js项目不起作用
- 获取字段值的函数-JS
- 函数js不能递归调用自己的函数
- 在函数JS中创建带有地理代码的标记
- 循环内部的函数(js/jquery)
- 我需要帮助将此代码添加到jQuery函数.js文件中
- 未捕获类型:未定义不是函数JS错误
- 停止多个内联函数JS的事件传播