javascript - JavaScript - 文本框 - 根据光标/突出显示的位置从字符串/文本框中删除字符
问题描述
所以我正在创建一个密码表只是为了练习。我有一个文本框,用户将在其中输入要检查的密码。它会在您键入时自动更新,因此无需输入密码并按下按钮。
这导致了我的问题。如果用户按下退格键,它会从字符串的末尾切出一个字符,问题是,如果将光标移动到说密码中间并删除一个字符,它仍然只从字符串的末尾切出一个字符END 不是光标的位置。如果突出显示和删除部分或全部密码也会发生同样的情况,它只会删除结束字符。
现在我可以清楚地看到代码中的问题所在,因为它目前只是使用 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);
}
推荐阅读
- gdi - 使用 pushlayer 和 poplayer 时,与 direct2d 兼容的 GDI 不起作用
- javascript - 尽管执行了 return false ,但仍会处理表单
- python - 在帖子下显示评论的聪明方法是什么?
- javascript - 异步函数完成后 Azure 函数不返回响应
- java - 有没有更好的方法来终止 iterator.forEachRemaining
- html - 如何更改默认引导程序必填字段样式
- swift - “标签”类型的值没有成员“lastUsed”
- r - 增加 R Shiny 中词云图的面积
- dart - Dart 事件循环控制等价物
- node.js - 将文件从 Angular 发送到 Node.js