是否可以通过更改某些event
对象属性来简单地更改在文本字段中写入的字符?例如,我想隐藏命令中的密码字符:
用户类型:
登录用户名密码
我想出现:
登录用户名
********
并将密码保存到变量。因此,我想在*
包含textbox.value
后将所有密钥重新映射到/^login [a-zA-Z0-9]+ /
。
编辑 - 恭敬地回答有关误解我的问题的评论:
因为以上所有都发生在一个小命令行客户端中,并且可能有多个命令,我可能希望通过*
混淆来保护,所以不能使用<input type="password" />
的想法!
答案 0 :(得分:2)
这个片段可以解决问题。它并不完美,但可以进一步发展。
window.onload = function () {
var cmdfield = document.getElementById('cmdfield'),
commandString = '',
cmds = '(login|logout)',
rex = new RegExp('^' + cmds + ' [a-zA-Z0-9]+ (\\w*)'),
keyPress = function (e) {
if ((e.which > 64 && e.which < 123) || (e.which > 47 && e.which < 58) || e.which === 32) {
commandString += String.fromCharCode(e.which);
this.value = commandString.replace(rex, function (m, a, b) {
var command = m.split(' ')[0],
param = m.split(' ')[1],
len = b.length;
if (len > 0) {
return command + ' ' + param + ' ' + new Array(len + 1).join('*');
}
if (len === 0) {
return command + ' ' + param + ' ';
}
});
}
e.preventDefault();
return;
},
keyDown = function (e) {
if (e.which === 8) {
commandString = commandString.substring(0, commandString.length - 1);
e.stopPropagation();
return;
}
if (!((e.which > 64 && e.which < 122) || (e.which > 47 && e.which < 58) || e.which === 32)) {
e.preventDefault();
}
return;
};
cmdfield.addEventListener('keydown', keyDown, false);
cmdfield.addEventListener('keypress', keyPress, false);
}
cmds
是所有单词的以管道分隔的列表,其后应该有一个可见参数,在该参数之后,文本字段上将有星星,直到下一个空格。如果命令不在列表中,则不会对第三个参数进行模糊处理。
如果您想在同一行上检测到多种类型的组合,请使用下面的正则表达式:
rex = new RegExp('\\b' + cmd + ' [a-zA-Z0-9]+ (\\w*)', 'g'),
“命令文本”的实际值存储在commandString
。
请注意,此实现不受鼠标或剪贴板文本编辑的保护。此外,在Firefox上运行时, BACKSPACE 在用户再次开始写入之前不会清空该字段。
jsFiddle的现场演示。
修改强>
实际上你的问题是关于覆盖Event
对象属性。通常,这些属性是只读的,不能修改。但是,该规则似乎有一个例外:至少IE9允许修改window.event.keyCode
处理程序中的onkeypress
。下面的代码段在调用内联onkeypress=capitalize()
时非常适用于IE9,但不适用于addEventListener()
附加的处理程序。
function capitalize() {
key = window.event.keyCode;
if (key > 96 && key < 123) {
window.event.keyCode = window.event.keyCode - 32;
}
return window.event.keyCode;
}
答案 1 :(得分:1)
您可以使用input type=password
,但由于任何其他原因,以下脚本将为您完成此任务。
var field = document.getElementById("password")
var val= "";
field.onkeydown = function(evt){
val+= String.fromCharCode(evt.keyCode)
this.value = val.replace(/./g,"*");
document.getElementById("hiddenfieldPassword").value = val; // Hidden Field to store the password.
return false;
}