Форма ввода телефонного номера
Всем доброго времени суток. Столкнулся с очередной проблемой. И она в форме ввода телефонного номера. При нулевом значении поля(пустое поле) ява отрабатывается нормально.
А вот если поле заполнено из базы и нам необходимо его отредактировать, то при установлении курсора в поле, старый номер стирается полностью, оставляя после себя только маску (+7-___-___-__-__) <input type="text" id="inp" name="phone" value=<?=$edit['userphone']?>> function setMask(I,M){ function R(s){return new RegExp('('+s.replace(/\(/g,'\\(').replace(/\)/g,'\\)').replace(/\//g,'\\/').replace(/9/g,'\\d').replace(/a/g,'[a-z?-??]').replace(/\*/g,'[a-z?-??0-9]')+')','gi')} function N(c,j,x){ for(var k=0,s='';k<L;k++)s+=$[k]||c||'_'; I.value=s; x?0:I.sC(!j?i:0) } function D(e,p,i){ p=I.gC(); if (p[0]==p[1]) { if(e)p[1]++; else p[0]-- } for(i=p[0];i<p[1];i++) if(!S[i]&&$[i]){ $[i]=0; j-- } return p } function V(){ setTimeout(function(k){ if (R(M).test(I.value)) { I.value=RegExp.$1; $=I.value.split(''); for(k=j=0;k<L;k++)if(!S[k])j++ } else N() },0) } function P(c){ if (c<35&&c!=8&&c!=32||c==45) return 1; switch(c){ case 8: i=D()[0]; return 0; case 46: i=D(1)[1]; return 0; case 35: i = L; return 1; case 36: i = 1; case 37: if (i-=2<-1) i=-1; case 39: if (++i>L) i=L; return 1; default: i=I.gC()[0]; while(i<L&&S[i]){i++} if (i==L) return 0; c = String.fromCharCode(c) if (R(M.charAt(i)).test(c)) { D(1); $[i++] = c; j++; while(i<L&&S[i]){i++} } return 0 } } var d=document, c='character', y=-100000, L=M.length, G=!c, i=0, j=0, $=M.split(''), S=M.split(''); for (var k=0;k<L;k++) if (/a|9|\*/.test($[k])) $[k]=S[k]=0; I = typeof I=='string' ? d.getElementById(I) : I; 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] } } I.onfocus = function(){ setTimeout(function(){N(0,!j)},0) } I.onblur = function(){ j ? N(' ',0,1) : this.value='' } I.onkeydown = function(e,c){ e = e||event; c = e.keyCode||e.charCode; if (c==8||c==46) { G = true; P(c); N(); return !G } else if (!window.netscape&&(c>34&&c<38||c==39)) P(c) } I.onkeypress = function(e){ if (G) return G=!G; e = e||event; if (P(e.keyCode||e.charCode)) return !G; N(); return G } if (d.all&&!window.opera) I.onpaste=V; else I.addEventListener('input',V,false) } setMask('inp','+7-999-999-99-99'); переменная $edit['userphone'] принемает значение телефонного номера в виде "+7-632-362-32-23" из базы. Может нужно пройтись по переменной preg_replace'ом и привести ее к виду: "6323623223" И засунуть в какую-то переменную в JS ? |
081 I.onblur = function(){ 082 j ? N(' ',0,1) : this.value='' //вот он на blur обнуляет поле ввода... 083 } И вообще, такой код с переменными J, k, a, z, n и т.п. больше не выкладывайте. Вам не кажется что из этих букв можно сделать слова, и будет намного понятней и легче читать код... |
Часовой пояс GMT +3, время: 14:22. |