在JSFIDLE上运行但不在网页上运行的Javascript
好的,我有一个代码,可以根据下拉选择显示不同的表单 祝你 它总是给我Test1,这意味着它没有改变div的显示,它在JSFiddle上工作,但不在网页上。。 这是我的网页标记在JSFIDLE上运行但不在网页上运行的Javascript,javascript,html,jsfiddle,Javascript,Html,Jsfiddle,好的,我有一个代码,可以根据下拉选择显示不同的表单 祝你 它总是给我Test1,这意味着它没有改变div的显示,它在JSFiddle上工作,但不在网页上。。 这是我的网页标记 <html> <body> <style> .hidden { display: none; } </style> <script type='text/javascript'> document.getE
<html>
<body>
<style>
.hidden {
display: none;
}
</style>
<script type='text/javascript'>
document.getElementById('options').onchange = function() {
var i = 1;
var myDiv = document.getElementById(i);
while(myDiv) {
myDiv.style.display = 'none';
myDiv = document.getElementById(++i);
}
document.getElementById(this.value).style.display = 'block';
};
</script>
<select name="options" id="options">
<option value="1"> Display </option>
<option value="2">Wka</option>
</select>
<div id="1" class="hidden" style="display: block">Test 1</div>
<div id="2" class="hidden">Test 2</div>
</body>
</html>
这是因为在fiddle中,您的代码被设置为以onLoad运行,但在您的代码中,它是在创建DOM之前运行的 将代码包装到window.onload事件中,如下所示:
window.onload = function()
{
document.getElementById('options').onchange = function() {
var i = 1;
var myDiv = document.getElementById(i);
while(myDiv) {
myDiv.style.display = 'none';
myDiv = document.getElementById(++i);
}
document.getElementById(this.value).style.display = 'block';
};
};
不管怎样,就像@positiveew所记得的那样,您的代码遗漏了标记。将JS脚本放入其中在语义上是正确的。您似乎缺少标记。您需要一个onload函数,以便在加载HTML后运行代码。试试这个:
window.onload = function () {
document.getElementById('options').onchange = function () {
var i = 1;
var myDiv = document.getElementById(i);
while (myDiv) {
myDiv.style.display = 'none';
myDiv = document.getElementById(++i);
}
document.getElementById(this.value).style.display = 'block';
};
}
您还可以在所有HTML之后,在body标记的末尾之前添加代码
请注意,在您的帖子中缺少标记。Jsfiddle正在运行窗口对象的脚本,您没有意识到它。这允许脚本在执行时暂停,直到DOM准备好进行操作为止 要使其在您自己的环境中工作,您可以: 将整个脚本放在您试图操作的HTML之后,例如 将代码保留在上方,并在加载窗口对象时运行,例如
window.onload = function () {
document.getElementById('options').onchange = function () {
var i = 1;
var myDiv = document.getElementById(i);
while (myDiv) {
myDiv.style.display = 'none';
myDiv = document.getElementById(++i);
}
document.getElementById(this.value).style.display = 'block';
};
}
当出现这种问题时,最好的办法是在JSFIDLE中工作,而不是在网页上,查看FIDLE页面的源代码 您的小提琴来源显示为:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title> - jsFiddle demo</title>
<script type='text/javascript' src='/js/lib/dummy.js'></script>
<link rel="stylesheet" type="text/css" href="/css/result-light.css">
<style type='text/css'>
.hidden
{
display: none;
}
</style>
<script type='text/javascript'>//<![CDATA[
window.onload=function(){
document.getElementById('options').onchange = function()
{
var i = 1;
var myDiv = document.getElementById(i);
while(myDiv)
{
myDiv.style.display = 'none';
myDiv = document.getElementById(++i);
}
document.getElementById(this.value).style.display = 'block';
};
}//]]>
</script>
</head>
<body>
<select name="options" id="options">
<option value="1"> Test1 </option>
<option value="2">Test2</option>
</select>
<div id="1" class="hidden" style="display: block">Test 1</div>
<div id="2" class="hidden">Test 2</div>
</body>
</html>
直接粘贴上面的代码就可以了
直接粘贴代码后,您可以删除不必要的行,如下所示:
<script type='text/javascript' src='/js/lib/dummy.js'></script>
<link rel="stylesheet" type="text/css" href="/css/result-light.css">
页面从上到下加载到DOM中 在DOM中存在id为options的元素之前,正在调用document.getElementById'options'
如果您将脚本放在div下面,它将起作用,因为在调用脚本之前div已经存在。这是正确的,但不是问题所在。