onKeyUp/onKeyPress
Здравствуйте!
Пишу проверку данных вводимых в input text. Есть: <input type="text" name="text" id="text" onKeyUp="control(this.value)">и скрипт к нему
function control(str)
{
var mask = /\W/
var result = check(str);
function check(str)
{
var result = mask.exec(str);
return result;
}
if(result != null)
{
var repl = str.replace(result, '');
control(repl);
}
else
{
if(result == null)
document.getElementById('text').value = str;
}
}
с onKeyUp работает как нужно, но перед удалением символ успевает отобразиться в поле, а это выглядит не очень.нашёл решение проблемы здесь, но не могу его переделать под себя =( если делаю с onKeyPress так
function control(str)
{
function value()
{
document.getElementById('text').value = str;
}
var mask = /\W/
var result = check(str);
function check(str)
{
var result = mask.exec(str);
return result;
}
if(result != null)
{
var repl = str.replace(result, '');
control(repl);
}
else
{
if(result == null)
setTimeout(value, 0);
}
}
то вообще не даёт ничего ввести, удаляет всё(хотя проверка идёт)подскажите, в чём проблема? |
FoxTrix,
Почитайте про события клавиатуры http://learn.javascript.ru/keyboard-events Порядок возникновения событий: 1) keydown 2) keypress - на момент этого события символ еще не введен в поле 3) keyup В вашем случае, чтобы неверный символ не отображался в поле, можно использовать событие keypress и проверять какой символ ввели (если не разрешенный - то делаем preventDefault). |
Hoshinokoe,
я знаю события клавиатуры, в ссылке которую я кидал http://learn.javascript.ru/events-and-timing-depth чуть ниже приведено решение, именно с onKeyPress, но под себя у меня его переделать не получается. preventDefault для меня не подойдёт т.к. при вставке текста через Ctrl + V (если в нем присутствуют запрещённые символы) предотвратится вставка всей строки, а не только запрещённых символов |
FoxTrix,
Тогда как-то так:
<input type="text" name="text" id="text"/>
<script type="text/javascript">
document.getElementById('text').onkeypress = function () {
var self = this;
function handle() {
var res = /\W/.exec(self.value);
if (res && res.length)
self.value = self.value.replace(res, '');
}
setTimeout(handle, 0);
};
</script>
|
Hoshinokoe,
Спасибо! немного переделал под себя, получилось так <input type="text" name="text" id="text" onKeyDown="a(this)">
function a(self)
{
function handle() {
var res = /\W/.exec(self.value);
if (res.length)
{
self.value = self.value.replace(res, '');
a(self);
}
}
setTimeout(handle, 0);
}
переделал на onKeyDown, чтобы отлавливать Ctrl+V и Shift+Insert, и добавил рекурсию для удаления нескольких символов вставленных через Ctrl+V =)Ещё раз спасибо!) |
| Часовой пояс GMT +3, время: 10:04. |