【问题标题】:Problem with comparing value with array values将值与数组值进行比较的问题
【发布时间】:2010-04-11 14:21:20
【问题描述】:

这个代码是我现在使用的。但是当我尝试使用数组来比较值时它不起作用。 如果有人知道原因,请回复。

<html>
 <head>
  <script type-'text/javascript'>

   function hovedFunksjon()
    {
     //alert("test av funksjon fungerte");
     //alert(passordLager);
     window.open("index10.html","Window1","menubar=no,width=430,height=360,toolbar=no");
    }

   function inArray(array, value) {
    for (var i = 0; i < array.length; i++) {
     if (array[i] == value) return true;
      }
       return false;
      }

   function spørOmPassord()
    {
     var passordLager = ["pass0","pass1","pass2"];

     window.passordInput = prompt("password");//Ved å bruke "window." skaper man en global variabel

     //if (passordInput == passordLager[0] || passordLager[1] || passordLager[2])
     if (inArray(passordLager,passorInput) )

      {
       hovedFunksjon();
      }
     else
      {
       alert("Feil passord");
       //href="javascript:self.close()">close window
      }
    }
   function changeBackgroundColor()
    {
     //document.bgColor="#CC9900";
     //document.bgColor="YELLOW"
     document.bgColor="BLACK"
    }
  </script>
 </head>

 <body>
  <script type-'text/javascript'>
   changeBackgroundColor(); 
  </script>
   <div align="center">
    <form>
     <input type = "button" value = "Logg inn" onclick="spørOmPassord()">
    </form>
   </div>
 </body>
</html>

【问题讨论】:

  • 我不明白你的意思。当你使用一个数组时,究竟在哪里比较什么?
  • 为什么你所有的函数/变量名称都与真实单词相差 1 个字母?让你很难理解你的代码。
  • 您的代码中有错字,这可能是也可能不是问题的原因:inArray(passordLager,passorInput) -- 看起来应该是 passordInput
  • @Samuel... 这不是英语;但它们真实的单词。

标签: javascript arrays


【解决方案1】:
 if (array[i] == value) return true;
  }
   return false;
  }

真的有误导性的缩进!

window.passordInput = prompt("password");

我不确定您为什么要使用全局来存储输入,因为您只在本地函数中使用它。 (如果您真的需要一个全局变量,则不需要 window. 前缀,因为您还没有使用本地 var 声明该变量。)

这可能是您的问题:prompt 在 IE7+ 中不再可用。出于(非常可疑的)安全原因,微软已经停止了它的工作。您可能需要想出另一种涉及表单字段的方法,例如:

<input id="password" type="password"/>
<input id="login" type="button" value="Login"/>

<script type="text/javascript">
    document.getElementById('login').onclick= function() {
        var password= document.getElementById('password').value;
        if (['pass0', 'pass1', 'pass2'].indexOf(password)!==-1) {
            window.open('thing.html', '_blank');
        } else {
            alert('no.');
        }
    };
</script>

我在这里使用Array#indexOf 进行列表内测试。这是新版 JavaScript 中的标准方法,但并非所有浏览器都支持它。您可以将其添加到不支持的浏览器中,如下所示:

// Add ECMA262-5 Array indexOf if not supported natively
//
if (!('indexOf' in Array.prototype)) {
    Array.prototype.indexOf= function(find, from /*opt*/) {
        for (var i= from || 0, n= this.length; i<n; i++)
            if (i in this && this[i]===find)
                return i;
        return -1;
    };
}

无论哪种方式,请注意 JavaScript 密码“保护”不仅不利于可访问性,而且完全不安全。你根本不应该在你关心的任何事情上使用它。如果您想正确执行,请查找真正的 HTTP 基本身份验证 (htaccess) 和/或基于 cookie 的表单登录。

【讨论】:

  • +1。我不认为 IE7 完全阻止 prompt。 IE7+ 只是(讽刺地)提示您允许或拒绝脚本窗口。尽管如此,prompt 仍然非常古老,而现代 JS 对话框替换要好得多。
  • 是的,它仍然存在,但是你必须跳过才能激活它的障碍足以使它在实践中无法使用,尤其是考虑到 IE 在第一次调用时默默地搞乱了脚本的方式。
【解决方案2】:

您刚刚在passorInput 中忘记了d

inArray(passordLager,passordInput)

【讨论】:

    【解决方案3】:

    您分配给window.passordInput 但传递passordInput - 它们不一样。

    如果您在 FireFox 中打开它,您可以通过 Tools->Error Console 看到执行脚本时生成的错误消息。

    【讨论】:

    • 实际上,window 的属性可以作为全局变量访问,因此分配window.passordInput 会创建全局passordInput。碰巧的是,他的代码中有一个错字,他实际上通过了passorInput,所以如果你自己打错了,你的答案可能会有一点有效性;-)
    • 其实这种情况下window.passordInputpassordInput是一样的,因为当前范围内没有passordInput
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 2013-10-23
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多