Включение и отключение пробела в jQuery - PullRequest
0 голосов
/ 06 мая 2020

Добрый день,

Я хотел бы включить / отключить клавишу пробела, чтобы строка не позволяла нажимать клавишу пробела в начале и в конце строки, но между ними следует принимать.

См. Следующий строковый шаблон, в котором X означает отказ в вводе пробелов.

XyyyyyX

В следующем коде у меня есть отключен пробельный ключ по умолчанию, так что первая буква не будет пробельной буквой.

Затем следует включение пробельного ключа, как только мои первая и последняя буквы не будут пробельными буквами. Оба выполнения "else if" не смогли включить пробельный ключ.

Благодарим вас за время, потраченное на рассмотрение этого вопроса.

$("#input").keydown(function (e) {
    if (e.keyCode == 32)
        return false;
    else if(this.value.charAt(0) != ' ')
        return true;
    else if(this.value.charAt(this.value.length - 1) != ' ')
        return true;
    });

Ответы [ 4 ]

1 голос
/ 06 мая 2020

keydown() срабатывает до того, как ключ будет вставлен в поле ввода, поэтому ваша функция обработчика событий будет запущена слишком рано. Кроме того, у вас нет возможности узнать, в какой позиции набирается символ; пользователь может вводить текст в начале, середине или конце строки. И последнее, но не менее важное: есть другие способы изменения значения в поле ввода, которые не связаны с событиями keydown или keyup.

Один из способов решения вашей проблемы в обход Javascript (и jQuery) полностью состоит в использовании шаблона :

<input id="input" pattern="^[^\s]+.*[^\s]+$">

Но если вы предпочитаете использовать jQuery:

$("#input").keyup(function (e) {
    e.target.value = e.target.value.trim()
});
0 голосов
/ 06 мая 2020

Вы можете попробовать следующий код:

$("#input").keydown(function (e) {
    var inputControl = document.getElementById('input');
    var startPos = inputControl.selectionStart;
    var endPos = inputControl.selectionEnd;
    var end = inputControl.value.length;

if (e.keyCode == 32 && (startPos==0 || startPos==end))
    return false;   
});
0 голосов
/ 06 мая 2020

Если вам нужна строка без каких-либо пробелов вокруг нее, вы можете использовать функцию trim для удаления пробелов в начале и начале строки. вам не нужно отключать пробел в этом случае.

Например,

$("#input").keydown(function (e) {
    let string = $(this).val();
    string = string.trim(); // this will remove whitespace around the string
    // now process string however you want
})
0 голосов
/ 06 мая 2020

Вам не нужно использовать специальный обработчик для предотвращения ввода пробелов, вы можете просто использовать .trim () method:

$('#getVal').click(function(){
  console.log($('#input').val());
  console.log($('#input').val().trim());
})
<script
  src="https://code.jquery.com/jquery-3.5.0.min.js"
  integrity="sha256-xNzN2a4ltkB44Mc/Jz3pT4iU1cmeR0FkXs4pru/JxaQ="
  crossorigin="anonymous"></script>
  
<input type="text" id="input" value="     AAAA    " />
<input type="button" id="getVal" value="Get value">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...