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