JavaScript - Текстовое поле - Удаление символов из строки / текстового поля в зависимости от расположения курсора / выделения - PullRequest
0 голосов
/ 05 марта 2020

Итак, я создаю счетчик паролей только для практики. У меня есть текстовое поле, где пользователь будет вводить свой пароль для проверки. Он обновляется автоматически при вводе текста, поэтому ввод пароля и нажатия кнопки невозможен.

Что приводит меня к моей проблеме. Если пользователь нажимает кнопку возврата, он отрезает символ от конца строки, проблема в том, что если курсор перемещается, чтобы сказать, середина пароля и символ удаляются, он все еще только отрезает символ от 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
   }
}

1 Ответ

0 голосов
/ 05 марта 2020

Хорошо, так что я заработал, используя 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);
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...