试图打开/关闭/自动按钮

时间:2013-10-05 22:11:11

标签: javascript html

我是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>

4 个答案:

答案 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)

  1. 在这一行:

    var onoffB = (); 
    

    您需要删除初始化程序或用其他内容替换括号。

  2. 在每个if声明中:

    if (document.getElementById("button1").value="On")
    

    设置 value,使其始终为真。您可能希望使用==进行比较,而不是在此处使用=进行比较。

  3. 虽然它不是问题而是可能的改进,但我建议将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>

如您所见,主要问题是:

  1. 你设置var onoffB =();虽然它应该是空的。
  2. 您应该使用“==”而不是“=”。
  3. 当值为'Auto'时,缺少另一个'else if'。
  4. 我希望我帮助过: - )

答案 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);
}