如何在替换之前将用户输入保存在另一个变量中

时间:2019-03-04 13:44:33

标签: javascript html

我正在尝试在JavaScript中用星号屏蔽密码,而不使用type="password",因为它不是星号。因此,我将密码保存在一个变量中,然后创建一个新变量以用asterisk(*)替换密码。之后,我尝试将var y传递给另一个get()函数以进行密码条件设置。问题在于,似乎var y没有传递给get()函数。

<!DOCTYPE html>
<html>
<body>

<p>A function is triggered when the user releases a key in the input field. The function transforms the character to upper case.</p>
Enter your name: <input type="text" id="pass" onkeyup="myFunction()">

<button onclick="get()">get password</button>
<script>
function myFunction() {
  var y = document.getElementById("pass");
  get(y);
  var x = document.getElementById("pass");
  x.value = x.value.replace(/./gi, '*');
}

function get(y){	
  var pass = y;
  document.getElementById("p").innerHTML = pass;
}
</script>
<p id="p"></p>
</body>
</html>

2 个答案:

答案 0 :(得分:0)

         var y = document.getElementById("pass").value;

使用此值传递值,但是每当您单击按钮时,它也会被替换为星号,因为您还使用了一个onclick函数,并且要检查点击输入值是否为星型,不要更新您的变量

答案 1 :(得分:0)

此脚本应该起作用,我只是将“ pass”声明为全局变量,这样您就可以将值存储在内部并且函数结束时不会丢失

var pass ="";
function myFunction() {
  var y = document.getElementById("pass");
  get(y);
  var x = document.getElementById("pass");
  x.value = x.value.replace(/./gi, '*');
}

function get(y){    
  pass += y.value[y.value.length -1];
  document.getElementById("p").innerHTML = pass;
}

更新1

pass += y.value[y.value.length -1];

等于pass = pass + y.value[y.value.length -1];,因此,如果您已经插入“ 123”并且要插入“ 4”,则此行将执行pass = "123" + y.value[y.value.length -1];
现在我们来谈谈y.value[y.value.length -1]; y.value是您内部的值,y.value.lenght是您的字符串的长度(字符串是一个字符数组),因此,如果标记中包含“ *** 4” y.value.length等于4。
在javascript和大多数其他语言中,您可以像从数组一样从字符串中选择单个字符。参见下面的示例

var text = "abcd";
text[0] // "a"
text[1] // "b"
text[2] // "c"
text[3]+text[0]// "da"

因此,如果我们有y.value = "***4"y.value.length = 4,则必须减去1,因为数组从0开始,如果您执行y.value[y.value.length -1],则将采用最后一个字符。所以

//pass = "123"
//i insert "4"
pass += y.value[y.value.length -1]; // pass = "123" + "4"
//pass = "1234"