Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 16.09.2008, 18:58
Аватар для Kos
Kos Kos вне форума
Аспирант
Отправить личное сообщение для Kos Посмотреть профиль Найти все сообщения от Kos
 
Регистрация: 01.09.2008
Сообщений: 79

ФФ:
1. позиция строки в поле при наборе длинного текста не смещается, т.е. курсор уходит за пределы поля
2. нельзя выделять с помощью Shift'а

Опера:
1. при вводе запрещ. символа позиция строки уст. на начало (в отличии от ФФ при вводе разреш. символов позиция строки смещ., т.е. курсор находится в пределах поля)
2. нельзя выделять с помощью Shift'а
3. при нажатии Ctrl выделение снимается

ИЕ:
1. с самого начала можно ввести один запрещенный символ, который сразу пропадает, если ввести еще что-нибудь
2. не работает Ctrl+Z
в остальном ИЕ работает идельно, позиция строки в поле при наборе текста смещается как положено, на начало не прыгает при вводе запрещ. символов, выделение с шифтом работает
вставка, копироване тоже работают

ГУГЛ:
В ГУГЛЕ все идеально

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

завтра ещё посмотрю...
Ответить с цитированием
  #23 (permalink)  
Старый 22.09.2008, 05:04
Аватар для Kos
Kos Kos вне форума
Аспирант
Отправить личное сообщение для Kos Посмотреть профиль Найти все сообщения от Kos
 
Регистрация: 01.09.2008
Сообщений: 79

Неполучается?

Напиши мне тогда комментарии (что, для чего и т. д.) - попробую разобраться.
Ответить с цитированием
  #24 (permalink)  
Старый 22.09.2008, 09:25
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

а, я просто занят был сильно на работе, сегодня посмотрю...
А по поводу ввода в ИЕ 1-го запрешённого символа - я такое поймать не смог.
Ответить с цитированием
  #25 (permalink)  
Старый 22.09.2008, 10:17
Аватар для Kos
Kos Kos вне форума
Аспирант
Отправить личное сообщение для Kos Посмотреть профиль Найти все сообщения от Kos
 
Регистрация: 01.09.2008
Сообщений: 79

Сообщение от ZoNT
А по поводу ввода в ИЕ 1-го запрешённого символа - я такое поймать не смог.
Ну и фиг с ним тогда.
Ответить с цитированием
  #26 (permalink)  
Старый 22.09.2008, 13:21
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

Сообщение от Kos
ФФ:
1. позиция строки в поле при наборе длинного текста не смещается, т.е. курсор уходит за пределы поля

Опера:
1. при вводе запрещ. символа позиция строки уст. на начало (в отличии от ФФ при вводе разреш. символов позиция строки смещ., т.е. курсор находится в пределах поля)

ИЕ:
2. не работает Ctrl+Z
У инпута нет управление текстом, чтобы он "заезжал", так что ФФ обламывается.
У меня в Опере ничего в начало не устанавливается...

В ИЕ работает Ctrl+Z, но он работает только на отмену удаления. Как побороть пока не придумал.


С шифтом сейчас разберусь.
Ответить с цитированием
  #27 (permalink)  
Старый 22.09.2008, 13:59
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

Вот с исправленным шифтом.
Про ИЕ (ctrl+Z) пока ничего не придумал.
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){
			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){
		e=e||event;
		if(e.ctrlKey||e.shiftKey)return true;
		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)
}
Ответить с цитированием
  #28 (permalink)  
Старый 22.09.2008, 14:40
Аватар для Kos
Kos Kos вне форума
Аспирант
Отправить личное сообщение для Kos Посмотреть профиль Найти все сообщения от Kos
 
Регистрация: 01.09.2008
Сообщений: 79

Да, с ФФ кнечно гон получился (самое плохое, что под ним дофига народа сидит), а в остальном все ништяг. Читал на англоязычных форумах, чего там только не написано про эту тему, но более менее работающей функции пока никто не представил. Жуткий все-таки этот язык javascript, чтобы написать то, на что в других языках (к примеру Delphi) уйдет пара строк, здесь необходимо ТАК выебнуться - УЖОСС!!!
Но ты вообще гений!
)
Ответить с цитированием
  #29 (permalink)  
Старый 22.09.2008, 15:23
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

Просто задача очень нестандартная и нетривиальная. Язык под такие задачи не заточен. А делфи более широкопрофильный...
Ответить с цитированием
  #30 (permalink)  
Старый 23.09.2008, 09:04
Аватар для Kos
Kos Kos вне форума
Аспирант
Отправить личное сообщение для Kos Посмотреть профиль Найти все сообщения от Kos
 
Регистрация: 01.09.2008
Сообщений: 79

Появилась идейка, как обойти баг в ФФ. Ты я так понял переписываешь значение инпута заново, поэтому в ФФ строка относительно границ элемента не съезжает. Но зато в ФФ работает charCode. Что если сделать проверку, если charCode не undefined, тогда корректируем символы с помощью него на лету, иначе уже написанным методом. По моему это должно сработать.
Ответить с цитированием
Ответ



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

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