JavaScript-文本框-根据光标/突出显示的位置从字符串/文本框中删除字符
所以我创建了一个密码表只是为了练习。我有一个文本框,用户将在其中输入密码进行检查。它会在您键入时自动更新,因此不需要键入密码并按下按钮 这就引出了我的问题。如果用户按下backspace按钮,它将从字符串的末尾分割一个字符,问题是,如果光标移动到密码的中间,并且删除了一个字符,它仍然只从字符串的末尾而不是光标的位置分割一个字符。如果高亮显示并删除部分或全部密码,则会发生相同的情况,它只会删除结束字符 现在我可以清楚地看到代码中的问题所在,因为它目前只使用pass.slice(0,-1),这当然会删除最后一个字符 我的问题是…是否有一种功能或技术可以让我根据光标的位置/如果用户高亮显示和删除,来删除字符 我猜一些psuedo代码应该是JavaScript-文本框-根据光标/突出显示的位置从字符串/文本框中删除字符,javascript,string,input,Javascript,String,Input,所以我创建了一个密码表只是为了练习。我有一个文本框,用户将在其中输入密码进行检查。它会在您键入时自动更新,因此不需要键入密码并按下按钮 这就引出了我的问题。如果用户按下backspace按钮,它将从字符串的末尾分割一个字符,问题是,如果光标移动到密码的中间,并且删除了一个字符,它仍然只从字符串的末尾而不是光标的位置分割一个字符。如果高亮显示并删除部分或全部密码,则会发生相同的情况,它只会删除结束字符 现在我可以清楚地看到代码中的问题所在,因为它目前只使用pass.slice(0,-1),这当然会
if (keycode == 8) {
pass.slice(0,cursorposition -1);
}
下面是我目前正在使用的相关代码
passDOM.addEventListener('keydown', function(e) {
strengthInit(e); //pass the event to the initiation class
});
function strengthInit(eKey) {
if (eKey.keyCode == 8) { //user pressed the backspace button
if (pass.length == 1) { //check to see if user deleted the password
pass = "";
document.getElementById("resultContainer").remove(); //remove the results
} else {
pass = pass.slice(0, -1); //remove a character
finalScore = PasswordSecurity(pass); //run through the checker
}
} else if (eKey.keyCode == 46 ) { //Delete key was pressed
//TODO: determine the lcoation of the cursor and delete one before or after
} else { //user has entered a new character, append to the end of the string
pass += eKey.key
finalScore = PasswordSecurity(pass); //run through the checker
}
}
好的,我使用selectionStart和selectionEnd实现了它 我不知道是否有更有效的方法
if (passDOM.selectionStart == passDOM.selectionEnd) { //only deleting one character
pass = pass.replace(pass[passDOM.selectionEnd -1], "");
} else { //deleting a selection
var result = pass.substring(passDOM.selectionStart, passDOM.selectionEnd);
pass = pass.replace(result,"");
finalScore = PasswordSecurity(pass);
}