Javascript 如何在另一个变量中保存用户输入

Javascript 如何在另一个变量中保存用户输入,javascript,html,Javascript,Html,我试图在javascript中用星号屏蔽密码,而不是使用type=“password”,因为它不是星号。因此,我将密码保存在一个变量中,然后创建一个新变量,用星号(*)替换密码。之后,我尝试将var y传递给另一个get()函数以获得密码条件。问题是,var y似乎没有传递给get()函数 当用户释放输入字段中的键时,会触发一个功能。该函数将字符转换为大写 输入您的姓名: 获取密码 函数myFunction(){ var y=document.getElementById(“pass”);

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


当用户释放输入字段中的键时,会触发一个功能。该函数将字符转换为大写

输入您的姓名: 获取密码 函数myFunction(){ var y=document.getElementById(“pass”); 得到(y); var x=document.getElementById(“pass”); x、 值=x.value.替换(//gi,'*'); } 函数get(y){ var-pass=y; document.getElementById(“p”).innerHTML=pass; }


使用此按钮传递值,但每当您单击按钮时,它将替换为星形,因为您也在使用一个onclick函数,并且要结束,只需检查单击时的输入值是否为星形,不要更新您的变量

此脚本应能工作,我只声明“传递”作为全局变量,所以您可以将值存储在其中,并且在函数结束时不会丢失它

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=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"

为什么不能使用类型密码?我认为这是最好的方法,在不重新设计轮子的情况下,我不会将您的密码字段替换为文本字段,原因如下:如果您不介意我问,为什么您特别希望使用星号而不是
type=password
中的标准填充圆?请使用常规密码类型
type=password
因为我想学习如何在javascript中屏蔽输入。但如果像这样屏蔽密码是个好主意,我不是舒尔。如果你想保护你的客户,你必须考虑密码加密和MITM预防,我想这是我们作为javascript初学者学习的基础。你能解释一下这行代码是做什么的吗?
pass+=y.value[y.value.length-1]。好的,谢谢!我现在知道了,但我注意到,当我快速键入时,输出结果不同,它突然包含了额外的星号,如果我删除了刚才键入的星号,它仍然会存储值。为什么会这样?这是因为我正在使用
onkeyup
?是的,尝试使用
onkeypress
setTimeout(函数,毫秒)
将执行延迟1-2毫秒,您应该在get()函数中实现一些字符检查
var text = "abcd";
text[0] // "a"
text[1] // "b"
text[2] // "c"
text[3]+text[0]// "da"
//pass = "123"
//i insert "4"
pass += y.value[y.value.length -1]; // pass = "123" + "4"
//pass = "1234"