Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 13.09.2008, 20:36
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

мне так лень... Я на выходных отдохнуть хочу. Если до понедельника не сделаешь, то в понедельник помогу
Ответить с цитированием
  #12 (permalink)  
Старый 13.09.2008, 20:43
Аватар для Kos
Kos Kos вне форума
Аспирант
Отправить личное сообщение для Kos Посмотреть профиль Найти все сообщения от Kos
 
Регистрация: 01.09.2008
Сообщений: 79

Так, ладно, в мозиле я заставил его работать и он тоже, оказывается отображает символы через charCode (что за несправедливость - почему в ИЕ и опере это не работает).

Так как же все таки разделять нажатия клавиш? (
Ответить с цитированием
  #13 (permalink)  
Старый 14.09.2008, 15:18
Аватар для Kos
Kos Kos вне форума
Аспирант
Отправить личное сообщение для Kos Посмотреть профиль Найти все сообщения от Kos
 
Регистрация: 01.09.2008
Сообщений: 79

Слушай ZoNT, а ведь ты тоже получается в своем скрипте разделяеш как-то нажатия символьных и функциональных клавиш. Ведь кроме нужных символов, ничего не вводится, а функц. клавиши работают. У меня премерно таже задача, только без маски, без ограничения по длине (разве что с помощью св-ва maxlength input'а). Необходимо только ограничивать ввод символов.

Ты мог бы сделать скрипт, в который бы вместо маски задавались бы разрешенные символы, ну и как у тебя: a - любая буква, 9 - любая цифра, * - буква или цифра. И чтобы не было ограничений по длине и юзер мог бы вводить эти символы как захотел. Я думаю многие тебе за это спасибо скажут - я уж точно
Ответить с цитированием
  #14 (permalink)  
Старый 15.09.2008, 09:52
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

напиши требования по пунктам. Мы обсудим требования и я сделаю...
Без чётких требований получается "сделай то, не знаю что"...
Ответить с цитированием
  #15 (permalink)  
Старый 15.09.2008, 16:25
Аватар для Kos
Kos Kos вне форума
Аспирант
Отправить личное сообщение для Kos Посмотреть профиль Найти все сообщения от Kos
 
Регистрация: 01.09.2008
Сообщений: 79

Функция с двумя параметрами (как у тебя):
1. ссылка на объект;
2. строка с разрешенными символами, все символы, кроме следующих разрешают только сами себя:
9 - разрешает ввод всех цифр;
a - разрешает ввод всех букв русского и латинского алфавитов;
z - разрешает ввод всех букв латинского алфавита;
я - разрешает ввод всех букв русского алфавита;
* - разрешает ввод всех букв русского и латинского алфавитов и всех цифр.

Пример: 'z()-.' - разрешает ввод всех букв латинского алфавита, скобок ( и ), тире и точки.

Функция должна только ограничивать ввод всех символов, не входящих в список разрешенных и больше ничего. При этом все функциональные клавиши должны работать (желательно, чтобы Ctrl+Z, Ctrl+C и Ctrl+V тоже).
Ответить с цитированием
  #16 (permalink)  
Старый 15.09.2008, 18:52
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

Потесть в разных браузерах, о багах пиши сюда...
function setMask(I,M){
	M = M.split('').join('|');
	if (/z/.test(M)) M = M.replace(/z/g,'[a-z]');
	else if (/я/.test(M)) M = M.replace(/я/g,'[а-яё]');
	else if (/a/.test(M)) M = M.replace(/a/g,'[a-zа-яё]');
	else if (/\*/.test(M)) M = M.replace(/\*/g,'[a-zа-яё0-9]');
	M = M.replace(/\(/g,'\\(').replace(/\)/g,'\\)').replace(/\//g,'\\/').replace(/9/g,'\\d').replace(/\./g,'\\.');

	var r = new RegExp(M,'i');
	
	function P(c,n){
		if(c<38||c==39||(c==45&&n)||(c==46&&!n)||r.test(String.fromCharCode(c)))return true;
		return false
	}
	function V(){
		setTimeout(function(k){
			var a=I.value.split(''),x=[];
			for(var i=0;i<a.length;i++)if(r.test(a[i]))x.push(a[i]);
			I.value=x.join('')
		},0)
	}
	
	I = typeof I=='string' ? document.getElementById(I) : I;
	
	I.onkeypress = function(e){
		e=e||event;
		return P(e.keyCode||e.charCode,e.charCode);
	}
	
	if (document.all&&!window.opera) I.onpaste=V;
	else I.addEventListener('input',V,false)
}
Ответить с цитированием
  #17 (permalink)  
Старый 15.09.2008, 19:27
Аватар для Kos
Kos Kos вне форума
Аспирант
Отправить личное сообщение для Kos Посмотреть профиль Найти все сообщения от Kos
 
Регистрация: 01.09.2008
Сообщений: 79

1. В ИЕ вводятся след. символы, даже когда их не разрешаешь ! # $ % . " '
2. В опере и мозиле не работают Ctrl+Z, Ctrl+C и Ctrl+V, в ие и гугле работают.
3. В ИЕ при обновлении стронице, до ввода чего либо, первым символом можно поставить все, что угодно, а потом только начинается проверка, повторить такое нельзя, пока не обновишь страницу.
Ответить с цитированием
  #18 (permalink)  
Старый 15.09.2008, 19:32
Аватар для Kos
Kos Kos вне форума
Аспирант
Отправить личное сообщение для Kos Посмотреть профиль Найти все сообщения от Kos
 
Регистрация: 01.09.2008
Сообщений: 79

В гугле, когда бэкспейсишь - курсор в конец прыгает, неудобно. При в встаках, кстати тоже. И в ИЕ при вставках курсор в конец смещается.
Ответить с цитированием
  #19 (permalink)  
Старый 15.09.2008, 21:30
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

1) странно, точку проверял, работала...
2) в ФФ вставка работает.
3) не понял...

надо значит всётаки хранить позицию
Ответить с цитированием
  #20 (permalink)  
Старый 16.09.2008, 11:43
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

Вот, потесть ещё:
function setMask(I,M){
	M = M.split('').join('|');
	if (/z/.test(M)) M = M.replace(/z/g,'[a-z]');
	else if (/я/.test(M)) M = M.replace(/я/g,'[а-яё]');
	else if (/a/.test(M)) M = M.replace(/a/g,'[a-zа-яё]');
	else if (/\*/.test(M)) M = M.replace(/\*/g,'[a-zа-яё0-9]');
	M = M.replace(/\(/g,'\\(').replace(/\)/g,'\\)').replace(/\//g,'\\/').replace(/9/g,'\\d').replace(/\./g,'\\.');

	var r = new RegExp(M,'i'), d=document, c='character', y=-100000;
	
	function V(){
		setTimeout(function(k){
			var s=I.gC()[0];
			var a=I.value.split(''),x=[];
			for(var i=0;i<a.length;i++)if(r.test(a[i]))x.push(a[i]);else s--;
			I.value=x.join('');
			I.sC(s);
		},0)
	}
	
	I = typeof I=='string' ? d.getElementById(I) : I;
	I.onkeypress = function(e){V();return true}
	I.sC = function(l,g){
		if(this.setSelectionRange) this.setSelectionRange(l,l);
		else {
			g = this.createTextRange();
			g.collapse(true);
			g.moveStart(c,y);
			g.move(c,l);
			g.select();
		}
	}
	I.gC = function(r,b){
		if (this.setSelectionRange) return [this.selectionStart,this.selectionEnd];
		else {
			r = d.selection.createRange();
			b = 0-r.duplicate().moveStart(c,y)
			return [b,b+r.text.length]
		}
	}
	
	if (d.all&&!window.opera) I.onpaste=V;
	else I.addEventListener('input',V,false)
}

Последний раз редактировалось ZoNT, 16.09.2008 в 11:45.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск