Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
beleza pessoal, o que eu quero fazer é assim:
Eu tenho varios campo com o name val_ onde o pode ser tel, cep, end, etc... mais ou menos uns 10 tipos
e para cada tipo eu tenho uma função val(elemento) onde o pode ser tel,cep,end, etc... uma para cada um dos nomes acima.
O que eu quero é passar um loop FOR por todos os elementos e os elementos que tiverem o nome val_* eu chamo a função equivalente para o campo.
function valElements(){
var input = document.getElementsByTagName("input");
for(i=0;i<input.length;i++){
input.name(elemento); //a ideia é substituir o nome do campo pela chamada da função, mas sem ter que fazer uns 10 if's para saber qual função chamar
};
};
por exeplo se o input.name é igual a "val_tel" eu chamo a função valTel(elemento)
nao sei se deu pra entender direito, qulaquer coisa eu tento explicar de outra forma
vlws
valeu !!!!!!!!!!!!!
funciono certinho, eu so preciso de mais uma informação: Como passar parametros para a função
eu tenho o FOR que percorre os elementos e chama as funções
for(i=0;i<campos.length;i++){
current = campos[i];
(new Function('return val' + attrName + '('+ current +')'))(); //é isso pegar o elemento atual e passar como parametro
}
e as funções sao construidas assim:
function valTel(element){
//codigo exemplo
alert(element.name);
}
eu pesquisei um pouco e vi alguns exemplos que os parametros são passados antes do codigo da função, mas nao funcionou
new Function(current,'return val' + attrName + '()'))();
como é qeu eu vou fazer isso ??
flws
(new Function(current,'return val' + attrName + '(' + current + ')'))();Tenta assim
http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
tambem nao funcionou, no fire bug da os seguintes erros
(new Function(current,'return val' + attrName + '(' + current + ')'))();malformed formal parameter (new Function(current,'return val' + attrName + '(' + current + ')'))();
(new Function('return val' + attrName + '(' + current + ')'))();missing ] after element list return valEma([object HTMLInputElement])
(new Function(current,'return val' + attrName + '()'))();malformed formal parameter (new Function(current,'return val' + attrName + '()'))();
a função de teste é essa
function valEma(element){
alert(element);
}
eu pesquisei um pouco mais e acho que para passar um paramentro tem que ser somente string, por exemplo isso funciona
(new Function('return val' + attrName + "('Teste')"))();
fwls
Separei por variável para ver se fica mais claro. Tenta aê.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="[http://www.w3.org/1999/xhtml"](http://www.w3.org/1999/xhtml) xml:lang="en" >
<head>
<title></title>
<script type="text/javascript">
function valElements(who){
var attrName = (who.getAttribute('name')).split("_")[1];
var t = 1;
var f = 'val' + attrName + '(' + t + ')';
(new Function('return ' + f))()
}
function valTel(teste){ if(teste == 1) alert('telefone'); }
function valCep(teste){ alert('cep'); }
</script>
</head>
<body>
<input type="text" name="val_Tel" onclick="valElements(this)" />
<input type="text" name="val_Cep" onclick="valElements(this)" />
</body>
</html>
http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
acho que eu nao expliquei direito, vamos la, eu consigo passar um parametro, mas numeros e strings, e o que eu estou tentando passar é o elemento corrente, exemplo
for(i=0;i<campos.length;i++){
current = campos[i]; //nesse caso o current vai ser um input,
(new Function('return val' + attrName + '('+ current +')'))(); //este input deve ser passado como parametro para ser manipulado pela função correspondente
}
como exemplo vamos dizer que o current esta com o input de id "telefone"
entao quando chamar a função valTel o parametro recebido é o input de id "telefone", ficando assim
function valTel(element){
alert(element.name)//mostra o nome do elemento
alert(element.id) // mostra o id
alert(element.length) // mostra o tamanho
.
.
.
}
Porem o que acontece é que o alert mostra "undefined".
Ai o que eu quero saber é se tem como fazer isso.
flws
Cara, posta como ficou a tua função, junto com um pedaço do HTML, para podermos testar aqui, e te falar onde está o problema
A função que eu to usando para teste é essa valTel do post #7
o html nao tem nada por que eu estou usando um listener que adiciona um listener em um botao que chama uma função, que é essa
var campos = valElements(); //essa é a função que pega todos os campos que eu preciso
var id,valor;
var attrName;
var first;
var current;
var erro = 0;
for(i=0;i<campos.length;i++){
current = campos[i]; // é o elemento atual do for no caso os inputs da pagina
attrName = (current.name).split("_")[1];
first = attrName.substring(0,1);
attrName = attrName.replace(first, first.toUpperCase());
id = current.id;
valor = current.value;
if( (new Function('return val' + attrName + "('"+id+"','"+valor+"')"))() ){
valido(current.id);
}else{
invalido(current.id);
erro ++;
}
}
if(erro > 0) alert("FALSE");
else alert("TRUE");
}
function valElements(){
var campos = document.getElementsByTagName("input");
var allInputs = new Array();
var current;
var count = 0;
for(i=0;i<campos.length;i++){
current = campos[i];
if(current.name.substring(0,4) == "val_"){
validar[count] = current;
count ++;
};
};
return allInputs;
esta é uma das função
function valChar(element,valor){
var patChar = /\w+/; //ess parte eu ainda nao terminei
if(patChar.test(valor)) return true;
else return false;
};
A parte do html onde estao os inputs é essa
<tr>
<td>Nome:*</td>
<td><input name="val_char" type="text" id="nome" size="50" /></td>
<td>O seu nome completo sem abreviações</td>
</tr>
<tr>
<td>Logradouro:*</td>
<td><input name="val_vchar" type="text" id="endereco" size="40" /></td>
<td>O nome da rua, av etc...</td>
</tr>
<tr>
<td>Número:*</td>
<td><input name="val_int" type="text" id="numero" size="3" /></td>
<td>O número do endereço</td>
</tr>
<tr>
<td>Telefone:**</td>
<td><input name="val_tel" type="text" id="telefone" size="11" maxlength="14" /></td>
<td>Deve se no formato (xx) xxxx-xxxx</td>
</tr>
Deste jeito esta funcionando perfeitamente.
POREM ....
O que eu preciso é que ao inves de passar dois parametros para a função valChar, sendo eles element e valor, que são definidos com id e valor láááá em cima na 1º função.
A ideia é passar o elemento atual como paramentro, mas fazendo as devidas alterações:
Trocando
new Function('return val' + attrName + "('"+id+"','"+valor+"')"))()Por
new Function('return val' + attrName + '('+ current +')'))()
e na funcao valChar
Trocar
function valChar(element,valor){
var patChar = /\w+/; //ess parte eu ainda nao terminei
if(patChar.test(valor)) return true;
else return false;
};
Por
function valChar(element){
alert(element.value); //aqui retorno é undefined
};
O retorno é undefined.
Tem jeito de se fazer isso ? ou vai ter que passar o id e o valor mesmo?
flws
Pesquisei aqui como retornar uma função dentro de outra (já tinha me esquecido como era :P) e cheguei no seguinte resultado:
}Exemplo de uso:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
Perdoe-me pelo HTML e por ter usado JavaScript obstrutivo... Estava com pressa.
http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif