" NaN的"将数组中的多个值乘以数字

时间:2016-03-18 01:57:43

标签: javascript html forms

注意:请注意 no 关注" Decrypt"功能,按钮等。此问题与没有相关。

我几乎到处寻找解决方案,而且由于我有点奇怪的项目,似乎无法找到一个。我是JavaScript的菜鸟,所以请告诉我任何可以改进的东西。这是我的项目:它基本上是一个加密/解密消息,基于你键入的键。当你输入密钥并提交它时,它会为密钥提供一个基于它的值&# 39; s长度和ASCII值:

    function submitkey(form) {
  keyinp = (form.key.value)
  var keyl = keyinp.length
  keyasciiout = keyinp.charCodeAt(0)
  document.getElementById("asciikeyout").innerHTML =
  "<b>" + keyinp + "</b> is your key."

  if (keyl > 4) {
    keyasciitwo = keyinp.charCodeAt(1)
    keyasciithree = keyinp.charCodeAt(2)
    keyasciifour = keyinp.charCodeAt(3)
    keyasciifive = keyinp.charCodeAt(4)
    finalkey = (((keyasciiout + keyasciitwo + keyasciithree + keyasciifour + keyasciifive) / keyl) * 0.5)
  }
  else { alert("Please choose a new key. It must be 5 or more characters.") }

}

现在您已经输入了一个密钥,它的值在加密/解密您的邮件中起作用。这是您输入的文本框和内容。

<form name="keyinput">
  <input type="text" id="key" name="key">
  <br>
  <input type="button" name="keysub" id="keysub" value="Submit Key" onclick="submitkey(this.form)">
</form>
<p id="asciikeyout"></p>
<p id="key2"></p>
  <br> <br>
  <br> <br>
  <br> <br>

<form name="field">
  <input type="button" name="decryptbutton" onclick="dec(this.form)" value="Decrypt">
  <br>
  <textarea id="input" rows="4" cols="50" onkeyup="getascii(this.form)" onkeydown="keycheck(this.form)"></textarea>
  <br>
  <br>
  <textarea id="output" rows="20" cols="70" fontsize="18px" readonly></textarea>
</form>
<p id="res2"></p>

顺便说一句,keycheck()函数就是这样一种情况:如果你输入文本框并且没有输入任何键作为键,它会提醒你创建一个键。

因此,无论何时键入输入文本框,它都会运行getascii(this.form),它只是获取您键入的所有字符的ASCII值并将它们存储为变量,在这种情况下, &#34;代码&#34;:

function getascii(form) {

globalinp=(form.input.value)
var str=(form.input.value);
code = new Array(str.length);
for(var i=0;i<str.length;i++){
code[i]=str.charCodeAt(i);
}

encrypt(code)
  }

反过来,运行encrypt(),它会放置&#34;代码&#34;将数值转换为数组(我想,这可能是问题。请告诉我。):

function encrypt(code) {

 sepcode = code.toString().replace(/,/g, " ")
      asciiarray = sepcode.split(" ");

      arrmult()

  }

然后,再次运行一个名为arrmult的函数,这是麻烦开始的地方(我认为)。

function arrmult() {
 var a = [asciiarray];

var b = a.map((function (x) { return x * finalkey; }).bind(this));

document.getElementById("output").innerHTML =
b
}

我从这个网站得到的上述代码。它的作用是将指定为变量A的数组的每个单独值,在这种情况下,所有在框中键入的ASCII值,并将它们乘以某个值,我将其设置为值的值。键。注意:当我用一串数字替换变量A时,如下所示:

var a = [127,93,28];

似乎工作得非常好。但是,当我使用asciiarray时,它返回的值为&#34; NaN&#34;,但仅当我执行多于一个字符时。当我只键入一个字符并将变量设置为:

var a = [asciiarray];

它完美无缺。但是当它更新并且有两个或更多字符时,它会产生&#34; NaN&#34;即使asciiarray的值与上面的数字完全相同。当你回复时,请帮助我意识到在哪里更换我做错了什么,因为我是一个JavaScript完整的菜鸟。

如果您希望完整地查看代码,请点击此处。如果您愿意,甚至可以将其复制并粘贴到HTML文件中:

<html>
<body>
  <head>
    <title>Ascii Encryption</title>
  </head>

<script>

var code="test"
var sepcode="test"
var keyinp="test"
var keyasciiout="test"
var finalkey="test"
var globalinp="test"
var globalascarr="test"
var multex="test"
var keyasciitwo="test"

function getascii(form) {

globalinp=(form.input.value)
var str=(form.input.value);
code = new Array(str.length);
for(var i=0;i<str.length;i++){
code[i]=str.charCodeAt(i);
}

encrypt(code)
  }
</script>

<script>

function submitkey(form) {
  keyinp = (form.key.value)
  var keyl = keyinp.length
  keyasciiout = keyinp.charCodeAt(0)
  document.getElementById("asciikeyout").innerHTML =
  "<b>" + keyinp + "</b> is your key."

  if (keyl > 4) {
    keyasciitwo = keyinp.charCodeAt(1)
    keyasciithree = keyinp.charCodeAt(2)
    keyasciifour = keyinp.charCodeAt(3)
    keyasciifive = keyinp.charCodeAt(4)
    finalkey = (((keyasciiout + keyasciitwo + keyasciithree + keyasciifour + keyasciifive) / keyl) * 0.5)
  }
  else { alert("Please choose a new key. It must be 5 or more characters.") }

}
</script>

<script>
  function encrypt(code) {

 sepcode = code.toString().replace(/,/g, " ")
      asciiarray = sepcode.split(" ");

      arrmult()

  }
</script>

<script>
  function arrmult(none) {
 var a = [asciiarray];

var b = a.map((function (x) { return x * finalkey; }).bind(this));

document.getElementById("output").innerHTML =
b
}
</script>

<script>
  function dec(form) {
    var input = (form.input.value)
    var inputdiv = (input / finalkey)
    var decrypted = String.fromCharCode(inputdiv)
    alert(decrypted)
  }
</script>

<script>
  function keycheck(form) {
    if (finalkey != null) {
      null
    } else {
      alert("Please enter a key. This will determine how your encryptions and decryptions are made.")
    }
  }
</script>

<center>

  <br> <br>
  <br> <br>
<form name="keyinput">
  <input type="text" id="key" name="key">
  <br>
  <input type="button" name="keysub" id="keysub" value="Submit Key" onclick="submitkey(this.form)">
</form>
<p id="asciikeyout"></p>
<p id="key2"></p>
  <br> <br>
  <br> <br>
  <br> <br>

<form name="field">
  <input type="button" name="decryptbutton" onclick="dec(this.form)" value="Decrypt">
  <br>
  <textarea id="input" rows="4" cols="50" onkeyup="getascii(this.form)" onkeydown="keycheck(this.form)"></textarea>
  <br>
  <br>
  <textarea id="output" rows="20" cols="70" fontsize="18px" readonly></textarea>
</form>
<p id="res2"></p>

</center>

</body>
</html>

0 个答案:

没有答案