Как использовать jQuery, чтобы предотвратить пробел ключа от пробела?
Я подумал, что было бы просто захватить ключ пробела, когда он будет введен в форме, чтобы он функционировал как дефис. Как правило, jQuery делает такие вещи очень простыми.
Код, который я пробовал, следующий:
$("#StreamUrl").keydown(function (e) {
if (e.keyCode == 32) return 109;
});
Но это не имеет никакого эффекта. Я попробовал более простой script:
$("#StreamUrl").keydown(function (e) {
//if (e.keyCode == 32) return 109;
alert(e.keyCode);
});
Этот script корректно предупреждает 32 о пробеле и 109 при дефисном нажатии. Кроме того, у меня нет ошибок JavaScript.
Почему бы не if (e.keyCode == 32) return 109;
работать? Когда я заменяю эту строку на if (e.keyCode == 32) alert("space!!");
, я получаю предупреждение правильно, поэтому я знаю, что if
возвращает true
правильно.
Что дает?
Изменить - Решение
Спасибо @Nick за то, что он указал на проблему с копией. У меня получилось немного гибрида. Здесь код, который я получил для работы, который является гладким и обрабатывает Copy/Paste.
$("#StreamUrl").keydown(function (e) {
if (e.keyCode == 32) {
$(this).val($(this).val() + "-"); // append '-' to input
return false; // return false to prevent space from being added
}
}).change(function (e) {
$(this).val(function (i, v) { return v.replace(/ /g, "-"); });
});
Ответы
Ответ 1
Проблема заключается в том, что return 109
не выполняет то, что вы хотите. В обработчике событий вы возвращаете true или false в зависимости от того, хотите ли вы, чтобы браузер выполнил действие по умолчанию. В keydown
вы должны вернуть false, чтобы предотвратить добавление символа.
$("#StreamUrl").keydown(function (e) {
if (e.keyCode == 32) {
$(this).val($(this).val() + "-"); // append '-' to input
return false; // return false to prevent space from being added
}
});
пример jsfiddle
Ответ 2
Обычно здесь требуется keyup
, которое запускается после того, как пространство было добавлено, что-то вроде этого немного проще:
$("#StreamUrl").bind("keyup change", function () {
$(this).val(function(i, v) { return v.replace(/ /g,"-"); });
});
Попробуйте здесь, то, что это делает, позволяет добавить пространство, но затем мгновенно заменяет пробелы для дефисов, передавая функция .val()
. Для более старых версий jQuery это будет выглядеть так:
$("#StreamUrl").bind("keyup change", function () {
$(this).val($(this).val().replace(/ /g,"-"));
});
Это работает даже для людей, вставляющих содержимое, простой способ обойти проверку keydown
.