Trofeu ACME pra voce :lol: - mexer sempre (e de forma correta) eh justamente o que faz a qualidade de um software aumentar. Conheca mais sobre Refactoring
Trofeu ACME pra voce :lol: - mexer sempre (e de forma correta) eh justamente o que faz a qualidade de um software aumentar. Conheca mais sobre Refactoring ;)[/quote]
Isso só vale quando o código te da os subsidios necessarios. Como ser compreensivel, testavel e finito.
Eu, pelo menos, não tenho coragem de tocar naqueles negocios de 8000 linhas que SDS oque faz e ate onde seus tentáculos se extendem.
Caso contrario, é aquilo que o vc falou, mexa mexa mexa e mexa mais ainda. Se não gostou só puxar a versão anterior do SCM e pronto.
Fiz uma gambiarrinha aqui, talvez ajude. Não está checando um monte de coisas, então dá uma olhada melhor.
Não entendo ainda direito o esquema de eventos em browsers nao-ie. Seria muito mais interessante o evento retornar a string correta, ao invés de substituir. Mas infelizmente um onkeydown=“return false;” não resolve nada.
Mas é um ponto de partida
<html>
<head>
<title>Tests</title>
<script language="javascript">
function mask( el )
{
var val = el.value;
var len = val.length;
var f = '';
// substituir por replace( ',', '' )
val = val.substring( 0, val.indexOf( ',' ) ) + val.substring( val.indexOf( ',' ) + 1, val.length );
for( var i = 0; i < len; i++ )
{
if( i == len - 3 )
f += ',';
if( i > 0 || val.charAt( i ) != '0' )
f += val.charAt( i );
}
el.value = f;
}
</script>
</head>
<body>
<input type="text" align="right" id="test" value="0,00" onkeyup="mask( this );"/>
</body>
</html>
A primeira é para formatar campos que já tem algum valor, e a outra é para mascarar enquanto digita.
Se chingar nas linhas de String[ index ], substitui por String.charAt( index ).
A formatação para money é so um teste, não funciona de maneira correta. E o mesmo problema com eventos citado acima ocorre:
var slash = "#";
function format( pattern, el )
{
var val = el.value;
var formatted = '';
var v = 0;
for( var i = 0; i < pattern.length; i++ )
formatted += ( pattern[ i ] == slash ) ? ( val[ v++ ] || '' ) : pattern[ i ];
el.value = formatted;
}
function mask( pattern, el, event )
{
var val = el.value;
var len = val.length;
el.setAttribute( 'maxlength', pattern.length );
if( pattern[ len ].indexOf( slash ) < 0 )
el.value += pattern[ len ];
}
<html>
<head>
<title>Mask Testing</title>
<style>
body, p, input
{
font-family: verdana;
font-size: 12px;
}
</style>
<script language="javascript" src="FormatUtils.js"></script>
</head>
<body>
<p>
<h1>Format Testing</h1>
Test Value: <input type="text" id="test" value="123456"/>
Pattern: <select onchange="document.getElementById( 'pattern' ).value = this.value">
<option value="R$ ##.###,##">R$ ##.###,##</option>
<option value="###.###.###-##">###.###.###-##</option>
<option value="#.##.###">#.##.###</option>
<option value="##/##/####">##/##/####</option>
<option value="###.###"/>###.###</option>
<option value="#.##.##.#"/>#.##.##.#</option>
</select>
<input type="text" id="pattern" value="R$ ##.###,##"/>
<input type="button" value="Format" id="format"
onclick="format( document.getElementById( 'pattern' ).value, document.getElementById( 'test' ) );" />
</p>
<hr/>
<p>
<h1>Mask Testing</h1>
Test Value: <input type="text" id="test2" value=""
onkeyup="mask( document.getElementById( 'pattern2' ).value, this, event );"/>
Pattern: <select onchange="document.getElementById( 'pattern2' ).value = this.value">
<option value="###.###.###-##">###.###.###-##</option>
<option value="##/##/####">##/##/####</option>
<option value="#.##.###">#.##.###</option>
<option value="###.###"/>###.###</option>
<option value="#.##.##.#"/>#.##.##.#</option>
</select>
<input type="text" id="pattern2" value="###.###.###-##"/>
</p>
</body>
</html>
Aproveitando a deixa, eu precisaria fazer uma máscara em JS.
Tipo, quando o usuario digitar apenas 1(UM) número em um campo onde o limite é 3, ao mudar o foco, eu precisaria substituir por ZERO para completar 3 numbers, entende?
tipo, eu insiro o numero 1
ao mudar o foco ele fica assim: 001
se eu preencher 23
ao mudar o foco ele fica assim: 023
Trofeu ACME pra voce :lol: - mexer sempre (e de forma correta) eh justamente o que faz a qualidade de um software aumentar. Conheca mais sobre Refactoring ;)[/quote]
Concordo…CONTANTO que você tenha tempo para fazer isso e tempo para corrigir os bugs que possam vir em decorrência dessa alteração!!!