2014-10-14 2 views
0

В textbox первый символ должен not be number. Так что я следующий код для этого: -JQuery - Первая буква не должна быть цифрой

DEMO

$('#FieldName').keyup(function (e) { 
    if ($(this).val().length === 1 && $.isNumeric($(this).val())) { 
     $(this).val(''); 
     alert('First letter should not be Numeric.!'); 
    } 
}); 

Приведенный выше код работает, но не тогда, когда typed fast. Попробуйте ввести быстрые цифры в скрипке. Он будет принимать номера.

Что такое решение для этого?

+1

Почему вы привязать его к KeyUp? Это действительно необходимо? Попытайтесь подумать о том, что вы на самом деле пытаетесь сделать, какова логика и пользовательский опыт, который вы пытаетесь достичь. Не просто переключите его на keydown, действительно подумайте о том, чего вы хотите достичь с этим ограничением и как вы хотите, чтобы он работал - когда у вас это есть, вы можете начать экспериментировать. – Nenotlep

ответ

2

Попробуйте это. Выполняет только первую букву напечатанного текста с slice(0,1): и проверяет.

$('#FieldName').keyup(function(e) { 
 
     if ($.isNumeric($(this).val().slice(0, 1))) { 
 
     $(this).val(''); 
 
     alert('First letter should not be Numeric.!'); 
 
     } 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" id="FieldName" />

+0

Это работает хорошо ...! Спасибо – Anup

+0

Добро пожаловать! –

+1

$ (this) .val() [0]) undefined говорит. Я упомянул здесь фрагмент, потому что полезен во многих других случаях, и мне это очень нравится. –

0

Изменить событие keyup() на keydown(). Это должно помочь.

$('#FieldName').keydown(function (e) { 
    if ($(this).val().length === 1 && $.isNumeric($(this).val())) { 
    $(this).val(''); 
    alert('First letter should not be Numeric.!'); 
    } 
}); 
1
$('#FieldName').keypress(function (e) { 
    if ($(this).val().length === 1 && $.isNumeric($(this).val())) { 
     $(this).val(''); 
     e.preventDefault(); 
     alert('First letter should not be Numeric.!'); 
    } 
}); 

Добавить e.preventDefault() внутри функции.

Демо:

http://jsfiddle.net/b653oo8c/

3

Простое решение с RegEx

$(function() { 
 
    $('.notFirst').on('input', function() { 
 
    this.value = this.value.replace(/^(\d+)/, ''); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" class="notFirst" />

+0

На сегодняшний день лучшее решение здесь, но я действительно думаю, что настоящая потребность может быть сложнее, чем это, если только это не для игры. – Nenotlep

+0

Это хорошо ... Но я хочу, чтобы появилось предупреждение ... или пользователь может подумать, если он сначала набирает цифры ... поэтому ничего не происходит ... :) – Anup

+0

Это вызывает уродливый эффект, когда вы продолжаете нажимать номер! –

1

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

Чтобы исправить это, вы можете сделать так:

$('#FieldName').keydown(function(){ 
    if(this.value.length==1 && this.value<<0==this.value) 
    { 
     this.value=''; 
     alert('First letter should not be Numeric.!'); 
    } 
}); 

Ваш код должен работать как можно быстрее внутри обработчика событий!

Используя jQuery, вы только замедлите ваш код.

Не кэширование $(this) замедляет еще больше!

Я использую jQuery только для того, чтобы бороться с проблемами, связанными с перекрестным браузером, и использовать событие sugested keydown.

Можно было бы использовать это, и будет работать нормально:

document.getElementById('FieldName').onkeydown=function(){ 
    if(this.value.length==1 && this.value<<0==this.value) 
    { 
     this.value=''; 
     alert('First letter should not be Numeric.!'); 
    } 
} 

Согласно @Kaiido, это проблема при проверке длины, когда keyup срабатывает событие.

Если мы сохраним производительность в поле зрения, мы могли бы просто избавиться от проверки длины:

document.getElementById('FieldName').onkeydown=function(){ 
    if(this.value.charAt(0)+1)//if it is a number, it will add 1, making it check as true 
    { 
     this.value=''; 
     alert('First letter should not be Numeric.!'); 
    } 
}); 
+0

Это не проблема производительности, он просто ищет клавиатуру с условием, что 'value.length === 1'. Конечно, если он быстро набирает скорость, когда срабатывает keyup, значение больше 1, потому что он уже нажал другую клавишу. – Kaiido

+0

Это по-прежнему актуальный вопрос. И если это проблема, я отрегулирую ответ. –

+0

Да, я удалил свой нижний план для ванили js – Kaiido

Смежные вопросы