Функция Javascript для ввода только алфавитов при нажатии клавиши

Я хочу ввести только символьные значения внутри <textarea> и числовые значения в другом. Мне удалось создать функцию JavaScript, которая позволяет вводить только числовые значения в <textarea> с помощью onkeypress. Это работает в Firefox и Chrome.

Для алфавитов я создаю еще одну функцию JavaScript, используя свойство windows.event. Единственная проблема в том, что это работает только в Chrome, а не в Firefox.

Я хочу знать, как разрешить ввод только алфавитов с использованием события onkeypress, которое используется для ввода только числовых значений?

function isNumberKey(evt){  <!--Function to accept only numeric values-->
    //var e = evt || window.event;
	var charCode = (evt.which) ? evt.which : evt.keyCode
    if (charCode != 46 && charCode > 31 
	&& (charCode < 48 || charCode > 57))
        return false;
        return true;
	}
		   
    function ValidateAlpha(evt)
    {
        var keyCode = (evt.which) ? evt.which : evt.keyCode
        if ((keyCode < 65 || keyCode > 90) && (keyCode < 97 || keyCode > 123) && keyCode != 32)
         
        return false;
            return true;
    }
<label for="cname" class="label">The Risk Cluster Name</label>
<textarea id="cname" rows="1px" cols="20px" style="resize:none" placeholder="Cluster Name" onKeyPress="return ValidateAlpha(event);"></textarea>
<br>
<label for="cnum">Risk Cluster Number:</label>
<textarea id="cmun" rows="1px" cols="12px" style="resize:none" placeholder="Cluster Number" onkeypress="return isNumberKey(event)"></textarea>


person Lucy    schedule 20.05.2013    source источник
comment
только символьные значения. Вы имеете в виду только буквы? Помните, что проверки нажатия клавиши недостаточно, поскольку пользователь может копировать/вставлять или перетаскивать, не вызывая события нажатия клавиши.   -  person nnnnnn    schedule 20.05.2013
comment
вместо этого использовать регулярные выражения?   -  person Nanda    schedule 20.05.2013
comment
Вот несколько примеров символов: 1, &, a, ), W. Вы имеете в виду буквы.   -  person nnnnnn    schedule 20.05.2013
comment
да, я хочу использовать такие буквы, как A,a,b,B   -  person Lucy    schedule 20.05.2013
comment
См. chandanprogramming.blogspot.in/2013/05 /   -  person Syed Mohamed    schedule 23.06.2014
comment
Вы проверили это на последней версии Firefox 45.0? это не работает   -  person Syed Ali    schedule 16.03.2016


Ответы (3)


Если вам не нужно поддерживать старые браузеры, я бы использовал событие input. Таким образом, вы также можете поймать не-альфа-символы, если пользователь вставит текст в textarea.

Я немного почистил ваш HTML. Наиболее важные изменения касаются событий cname и cnum. Обратите внимание, что событие в обоих случаях было изменено на oninput.

<label for="cname" class="label"> The Risk Cluster Name</label>
<textarea id="cname" rows="1" cols="20" style="resize:none" placeholder="Cluster Name" oninput="validateAlpha();"></textarea>
<label for="cnum">Risk Cluster Number:</label>
<textarea id="cmun" rows="1" cols="12" style="resize:none" placeholder="Cluster Number" oninput="isNumberKey();"></textarea><br /><br /><br />

Предполагая, что вы хотите, чтобы cname принимал только символы алфавита, а cnum принимал только числа, ваш JavaScript должен быть:

function validateAlpha(){
    var textInput = document.getElementById("cname").value;
    textInput = textInput.replace(/[^A-Za-z]/g, "");
    document.getElementById("cname").value = textInput;
}
function isNumberKey(){
    var textInput = document.getElementById("cmun").value;
    textInput = textInput.replace(/[^0-9]/g, "");
    document.getElementById("cmun").value = textInput;
}

Этот код использует регулярные выражения, способ сопоставления шаблонов в строках.

person Josh Sherick    schedule 25.12.2013

Лучшее использование

<input type="text" name="checkno" id="checkno" class="form-control"  value="" onkeypress="return isNumber(event)"/>

<input type="text" name="checkname" id="checkname" class="form-control" value="" onkeypress="return isAlfa(event)"/>


function isNumber(evt) {
    evt = (evt) ? evt : window.event;
    var charCode = (evt.which) ? evt.which : evt.keyCode;
    if (charCode > 31 && (charCode < 48 || charCode > 57)) {
        return false;
    }
    return true;
}

function isAlfa(evt) {
    evt = (evt) ? evt : window.event;
    var charCode = (evt.which) ? evt.which : evt.keyCode;
    if (charCode > 31 && (charCode < 65 || charCode > 90) && (charCode < 97 || charCode > 122)) {
        return false;
    }
    return true;
}
person Siddhartha esunuri    schedule 22.01.2016

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

<asp:Textbox Id="txtPhone" runat="server" onKeyPress="return onlyNumbersandSpecialChar()">     </asp:Textbox>

function onlyNumbersandSpecialChar(evt) {
    var e = window.event || evt;
    var charCode = e.which || e.keyCode;
    if (charCode > 31 && (charCode < 48 || charCode > 57 || charCode > 107 || charCode > 219 ||          charCode > 221) && charCode != 40 && charCode != 32 && charCode != 41 && (charCode < 43 || charCode > 46)) {
        if (window.event) //IE
            window.event.returnValue = false;
        else //Firefox
            e.preventDefault();
    }
    return true;

   }

 </script>
person RekhaShanmugam    schedule 30.05.2013
comment
спасибо за код, но я хотел ввести только алфавиты (нижний и верхний регистр) и некоторые специальные символы, такие как ,.+-: и пробел между алфавитами, а также... так что не могли бы вы отредактировать свой ответ соответствующим образом... - person Lucy; 30.05.2013