我是javascript的新手,我正试图制作一个循环开启/关闭/自动每次点击的按钮。每个州还必须在if语句中运行代码,并在代码中运行代码。我目前无法接缝以使其正确运行。稍后一旦我开始工作,我希望“if语句”功能在它自己的.js文件中,所以我可以引用它用于其他开/关/自动按钮。而开关将是主要代码的一部分。我做错了什么?
function cycle()
{
var onoffB = ();
if (document.getElementById("button1").value="On")
{
onoffB=1;
document.getElementById("button1").value="Off";
}
else if (document.getElementById("button1").value="Off")
{
onoffB=2;
document.getElementById("button1").value="Auto"
}
else
{
onoffB=0;
document.getElementById("button1").value="On"
}
switch(onoffB)
{
case 0:
//running code;
break;
case 1:
//running code;
break;
case 2:
//running code;
break;
}
}
</script>
</head>
<body>
<input type="button" id="button1" value="On" onclick="cycle()">
</body>
</html>
答案 0 :(得分:3)
嗯,我看到了两个大问题。首先,以下语法是无效的JavaScript:
var onoffB = ();
我认为你的意思是onoffB
有一个未定义的状态,你最好这样做:
var onoffB = null;
其次,您使用的是作业(=
)而不是比较(==
或===
)。 (根据经验,除非你有充分的理由知道自己在做什么,否则你应该总是更喜欢===
而不是==
。)请考虑以下事项:
var x = 3; // *sets* the value of x to 3
var x == 3; // invalid syntax
var x === 3; // invalid syntax
if( x = 2 ) { print 'x is 2'; } // will *always* print 'x is 2', no matter what
// the value of x is; x now has the value 2
// PROBABLY NOT WHAT YOU WANT
if( x = 0 ) { print 'x is 0'; } // will *never* print 'x is 0', no matter what
// the value of x is; x now has the value 0
// PROBABLY NOT WHAT YOU WANT
if( x === 5 ) { print 'x is 5'; } // will only print 'x is 5' if the value of x
// is 5; value of x
if( x === 0 ) { print 'x is 0'; } // will only print 'x is 0' if the value of x
// is 0; value of x unchanged
我也会改变很多风格。由于您的格式选择,您的代码很难阅读。此外,还有很多不必要的重复代码。如果我写这篇文章,我会将其缩短为以下内容:
switch( document.getElementById("button1").value ) {
case 'On':
// do stuff
break;
case 'Off':
// do stuff
break;
case 'Auto':
// do stuff
break;
default:
// probably an error condition; show message, maybe?
break;
}
如果您确实需要开/关/自动按钮的值,可以在case
实体内设置。
答案 1 :(得分:0)
在这一行:
var onoffB = ();
您需要删除初始化程序或用其他内容替换括号。
在每个if
声明中:
if (document.getElementById("button1").value="On")
您设置 value
,使其始终为真。您可能希望使用==
进行比较,而不是在此处使用=
进行比较。
虽然它不是问题而是可能的改进,但我建议将document.getElementById
的结果放在变量中,这样你就可以了不必继续打电话。它本身应该相当快,但一次这样做可能会更快。
答案 2 :(得分:0)
这是完整的工作和运行代码:
<html>
<head>
<script type="text/javascript">
function cycle()
{
var onoffB = null;
if (document.getElementById("button1").value == "On")
{
onoffB = 1;
document.getElementById("button1").value = "Off";
}
else if (document.getElementById("button1").value == "Off")
{
onoffB = 2;
document.getElementById("button1").value = "Auto";
}
else if (document.getElementById("button1").value == "Auto")
{
onoffB = 0;
document.getElementById("button1").value = "On";
}
switch(onoffB)
{
case 0:
//running code;
break;
case 1:
//running code;
break;
case 2:
//running code;
break;
}
}
</script>
</head>
<body>
<input type="button" id="button1" value="On" onclick="cycle();">
</body>
</html>
如您所见,主要问题是:
我希望我帮助过: - )
答案 3 :(得分:0)
尝试这样的事情:
var doc = document, bod = doc.body;
function E(e){
return doc.getElementById(e);
}
var state = 'On';
function onOffAuto(element){
var e = element;
switch(state){
case 'On':
e.value = state = 'Off';
return;
case 'Off':
e.value = state = 'Auto';
return;
case 'Auto':
e.value = state = 'On';
return;
}
}
E('button1').onclick = function(){
onOffAuto(this);
}