Добрый день. Пытался найти код, позволяющий делать ввод только на одном языке. Суть такая:
"Как только я начинаю вводить например на русском языке, последующий ввод скажем латиницы - запрещен. То же самое и при вводе латиницы. Если поле стало пустым (например удаление символов), должен произойти сброс настроек, так чтобы я смог назначить заново язык".
Получилось реализовать ввод только на одном языке, меняя на лету маску. А вот как при опустении поменять поведение - так и не допер.
Вот мой г*внокод (не судите строго, я явно не Гуру JS).
(function() {
jQuery.keyboardLayout = {};
jQuery.keyboardLayout.target;
jQuery.keyboardLayout.layout;
jQuery.keyboardLayout.show = function(layout){
this.layout = layout;
};
jQuery.keyboardLayout.hide = function(){
this.target = null;
this.layout = null;
};
jQuery.fn.keyboardLayout = function(){
this.each(function(){
$(this).focus(function(){
jQuery.keyboardLayout.target = $(this);
});
$(this).blur(function(){
jQuery.keyboardLayout.hide();
});
$(this).keypress(function(e){
var c = (e.charCode == undefined ? e.keyCode : e.charCode);
var layout = jQuery.keyboardLayout.layout;
if (c >= 97/*a*/ && c <= 122/*z*/ && !e.shiftKey ||
c >= 65/*A*/ && c <= 90/*Z*/ && e.shiftKey ||
(c == 91/*[*/ && !e.shiftKey ||
c == 93/*]*/ && !e.shiftKey ||
c == 123/*{*/ && e.shiftKey ||
c == 125/*}*/ && e.shiftKey ||
c == 96/*`*/ && !e.shiftKey ||
c == 126/*~*/ && e.shiftKey ||
c == 64/*@*/ && e.shiftKey ||
c == 35/*#*/ && e.shiftKey ||
c == 36/*$*/ && e.shiftKey ||
c == 94/*^*/ && e.shiftKey ||
c == 38/*&*/ && e.shiftKey ||
c == 59/*;*/ && !e.shiftKey ||
c == 39/*'*/ && !e.shiftKey ||
c == 44/*,*/ && !e.shiftKey ||
c == 60/*<*/ && e.shiftKey ||
c == 62/*>*/ && e.shiftKey) && layout != 'EN') {
layout = 'en';
} else if (c >= 65/*A*/ && c <= 90/*Z*/ && !e.shiftKey ||
c >= 97/*a*/ && c <= 122/*z*/ && e.shiftKey) {
layout = 'EN';
} else if (c >= 1072/*а*/ && c <= 1103/*я*/ && !e.shiftKey ||
c >= 1040/*А*/ && c <= 1071/*Я*/ && e.shiftKey ||
(c == 1105/*ё*/ && !e.shiftKey ||
c == 1025/*Ё*/ && e.shiftKey ||
c == 8470/*№*/ && e.shiftKey ||
c == 59/*;*/ && e.shiftKey ||
c == 44/*,*/ && e.shiftKey) && layout != 'RU') {
layout = 'ru';
} else if (c >= 1040/*А*/ && c <= 1071/*Я*/ && !e.shiftKey ||
c >= 1072/*а*/ && c <= 1103/*я*/ && e.shiftKey) {
layout = 'RU';
}
if (layout) {
jQuery.keyboardLayout.show(layout);
}
console.log(layout);
if(!this.value) {
layout = "";
console.log("123");
e.preventDefault();
//$(this).removeClass("rusonly");
//$(this).removeClass("engonly");
}
if(layout == 'ru' || layout == 'RU'){
if ($(this).hasClass("rusonly")) {
} else if ($(this).hasClass("engonly")) {
} else {
$(this).addClass("rusonly");
$(this).removeClass("engonly");
}
} else if(layout == 'en' || layout == 'EN'){
if ($(this).hasClass("engonly")) {
} else if ($(this).hasClass("rusonly")) {
} else {
$(this).addClass("engonly");
$(this).removeClass("rusonly");
}
}
//ввод только английского
$('.engonly').bind('keyup blur',function(){
if($(this).val() != 'Отсутствует'){
$(this).val( $(this).val().replace(/[А-Яа-я]/g,'') );
}
}
);
//ввод только русского
$('.rusonly').bind('keyup blur',function(){
if($(this).val() != 'Отсутствует'){
$(this).val( $(this).val().replace(/[A-Za-z]/g,'') );
}
}
);
});
});
};
})();
Вызываю это всё при помощи:
$(function () {
$('#jur_name').keyboardLayout();
})
Подскажите, может есть готовое решение получше или можно как-то добить этот добавив возможность сброса replace до "по-умолчанию"?