我正在尝试学习一些网络编程,我遇到了这个问题。
我在我的网站上使用FullCalendar,并将日历创建在单独的JavaScript文件中。那是funktiot.js。然后我有我的index.php文件,其中包括第一个JQuery,然后是我的funktiot.js。之后我调用我的日历创建功能。但是它只在我将包含和方法调用放入body时才有效。
例如,这不起作用
<li class="sport-wrapper">
<a href=".php">Sports </
<ul class="sports">
<li><a href=".php">Football</a></li>
<li><a href=".php">Rugby</a></li>
<li><a href=".php">Hockey</a></li>
<li><a href=".php">Golf</a></li>
<li><a href=".php">Tennis</a></li>
</ul>
</li>
.sports {
display: none;
padding: 0;
position: absolute;
}
.sport-wrapper:hover .sports {
display: block;
}
#nav .sports li {
display: block;
}
#nav li {
display: inline-block;
}
但是这样做
<head>
<script src='libs/fullcalender/lib/jquery.min.js'></script>
<script src="libs/bootstrap/js/bootstrap.js"></script>
<script src='libs/fullcalender/lib/moment.min.js'></script>
<script src='libs/fullcalender/fullcalendar.js'></script>
<script src="libs/fullcalender/lang/fi.js"></script>
<script src="js/funktiot.js"></script>
<script type='text/javascript'>
$(document).load(luoKalenteri("#calendar", <?php echo $_GET["id"]; ?>));
</script>
</head>
<body>
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
<div id='calendar'></div>
</div>
</body>
我认为第一个可以使用$(document).load并在其他所有内容之前包含JQuery吗?我做错了什么?
答案 0 :(得分:1)
您的代码必须在页面初始化完成后执行。
Jquery有一个缓解问题的功能:
$( document ).ready()
http://learn.jquery.com/using-jquery-core/document-ready/
如上所述:“在文档”准备好“之前,页面无法安全操作.jQuery会为您检测此状态。$(document).ready()中包含的代码只会在页面运行一次文档对象模型(DOM)已准备好执行JavaScript代码。“
答案 1 :(得分:1)
$(document).load(luoKalenteri("#calendar", <?php echo $_GET["id"]; ?>))
这不会起作用。从内到外打破它:
var result = luoKalenteri("#calendar", <?php echo $_GET["id"]; ?>);
// result => undefined
$(document).load(result);
// Or
$(document).load(undefined);
由于解析头部时#calendar
尚未就绪,luoKalenteri
可能会崩溃或无效。
相反,你应该将一个函数而不是函数调用的结果传递给load()
:
$(document).load(function() {
luoKalenteri("#calendar", <?php echo $_GET["id"]; ?>);
});
在代码中间注入PHP是不好的形式。它使可读性变得困难,并且在尝试调试时可能是令人头疼的问题。最好将所有PHP注入推送到这样的中心位置:
<script>
var CONFIG = {
calendarId: <?php echo $_GET["id"]; ?>
};
</script>
<script>
$(document).load(function() {
luoKalenteri("#calendar", CONFIG.calendarId);
});
</script>
答案 2 :(得分:0)
尝试使用$(document).ready(function() {});
<强>原因强>:
基本上你的javascript代码甚至在页面完全加载之前运行,并且在放入头部时创建DOM。
答案 3 :(得分:0)
只需将代码包装成这样:
jQuery(document).ready(function() {
// write your code here
});
通过执行此操作,您的代码将在DOM加载后执行!
答案 4 :(得分:-2)
您应该始终将脚本标记放在身体的底部。它使页面加载缓慢,如果在顶部,所以你真的没有问题。