Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) comparar campos


unisov

Pergunta

16 respostass a esta questão

Posts Recomendados

  • 0

ola

seguindo um outro modelo eu fiz mais ou menos o q você falou...

ficou assim:

array=Array();
array[0]=document.getElementById("eso").value;
array[1]=document.getElementById("eso2").value;
array[2]=document.getElementById("eso3").value;
array[3]=document.getElementById("eso4").value;
array[4]=document.getElementById("eso5").value;

for(var i = 0; i < 5; i++)
{
    for(var j = i; j < 5; j++)
    {
        if(array[i] == array[j])
        {
        ok = false;
        }
    }
}
if(!ok) 
        {
        alert(ok); return false;
        }

mas não deu certo...

sera q fiz algo errado?

ele sermpre retora "ok=false"

imagino q isso aconteça por q ele sempre vai se econtrar com um valor igual quando esta perconrrendo o loop

Link para o comentário
Compartilhar em outros sites

  • 0

não é q acontece erro...

o problema é q ele sermpre retorna ok=false

e isso é pra acontecer apenas quando houverem os campos iguais...

como eu já disse, creio q o motivo disso seja o fato de sempre haverem valores iguais nos dois loops...

tipo...

quando o loop interno estiver percorrendo o loop externo ele os valores sempre iram se topar...

ou estou errado?

Link para o comentário
Compartilhar em outros sites

  • 0

o form:

<form onsubmit='return nickrepetido();' method='POST' action='index.php?act=atividade&id=".$id."'>
    <input name='eso' id='eso' type='text' value='".$row['eso']."' />
    <input name='eso2' id='eso2' type='text' value='".$row['eso2']."' />
    <input name='eso3' id='eso3' type='text' value='".$row['eso3']."' />
    <input name='eso4' id='eso4' type='text' value='".$row['eso4']."' />
    <input name='eso5' id='eso5' type='text' value='".$row['eso5']."' />
    <input type='hidden' name='id' value='".$id."' />
    <input type='submit' name='button' value='Atualizar' />

     </form>
o js:
function nickrepetido(){
array=Array();
array[0]=document.getElementById("eso").value;
array[1]=document.getElementById("eso2").value;
array[2]=document.getElementById("eso3").value;
array[3]=document.getElementById("eso4").value;
array[4]=document.getElementById("eso5").value;

for(var i = 0; i < 5; i++)
{
    for(var j = i; j < 5; j++)
    {
        if(array[i] == array[j])
        {
        ok = false;
        }
    }
}
if(!ok)
        {
        alert(ok); return false;
        }
}

Link para o comentário
Compartilhar em outros sites

  • 0

eu fiz as modificaçoes e continuou como estava...

acho q não estao me entendeno...

veja essa parte do codigo

if(array[i] == array[j])

ele deveria retornar um erro sempre q econtrasse dois valores iguais...

mas assim ele sempre vai econtrar dois valores iguais... então o erro sempre sera retornado

afinal quando o loop estiver sendo percorrido semrpe havera o encontro de array[0] com array[0], de array[1] com array[1], e assim por diante...

Link para o comentário
Compartilhar em outros sites

  • 0

function nickrepetido(){
array=Array();
array[0]=document.getElementById("eso").value;
array[1]=document.getElementById("eso2").value;
array[2]=document.getElementById("eso3").value;
array[3]=document.getElementById("eso4").value;
array[4]=document.getElementById("eso5").value;
var ok = true;
for(var i = 0; i < 5; i++)
{
    for(var j = i; j < 5; j++)
    {
        if(array[i] == array[j])
        {
        ok = false;
        }
    }
}
if(!ok){
return true;
}else{
alert(ok); return false;
}
}

Editado por unisov
Link para o comentário
Compartilhar em outros sites

  • 0

O motivo pelo qual não funciona é bem simples !

Basta observar que você está comparando cada elemento X do combo com todos os elementos (incluindo o próprio X), o que fará com que sempre existam ítens iguais (afinal, X = X)

O código também estava meio bagunçado, segue o código funcionando e organizado:

function nickrepetido() {
    //Array de ítens
    array = new Array();
    array[0] = document.getElementById("eso").value;
    array[1] = document.getElementById("eso2").value;
    array[2] = document.getElementById("eso3").value;
    array[3] = document.getElementById("eso4").value;
    array[4] = document.getElementById("eso5").value;
    //Faz a verificação
    var ok = true;
    for (var i = 0; i < 5; i++) {
        for (var j = i+1; j < 5; j++) {
            if (array[i] == array[j]) {
                alert("Dados repetidos !")
                return false
            }
        }
    }
}

Note que se não for especificado um valor de retorno a função retornará undefined. Nesse caso, o formulário será enviado da mesma forma e não haverá problema.

Obs.:

  • O código poderia ser organizado de forma mais inteligente, o que o tornaria até mais eficiente, mas deixei assim para não ficar confuso.
  • Seria interessante o uso de classes ao invés de id's para esse tipo de código

Qualquer coisa posta aí !

Link para o comentário
Compartilhar em outros sites

  • 0

funcionando perfeitamente...

muito obrigado Jonathan Queiroz

porem eu me deparei com um novo problema, pois o script indentificava os campos vazios como dados repetidos...

não sei se era a melhor forma de resolver o problema, mas resovi da seguinte forma, e agora ta 100%

vlw mesmo

function nickrepetido() {
    //Array de ítens
    array = new Array();
    if(document.getElementById("eso").value!=""){array[0] = document.getElementById("eso").value;} else {array[0] = 0;}
    if(document.getElementById("eso2").value!=""){array[1] = document.getElementById("eso2").value;} else {array[1] = 1;}
    if(document.getElementById("eso3").value!=""){array[2] = document.getElementById("eso3").value;} else {array[2] = 2;}
    if(document.getElementById("eso4").value!=""){array[3] = document.getElementById("eso4").value;} else {array[3] = 3;}
    if(document.getElementById("eso5").value!=""){array[4] = document.getElementById("eso5").value;} else {array[4] = 4;}
    //Faz a verificação
    var ok = true;
    for (var i = 0; i < 5; i++) {
        for (var j = i+1; j < 5; j++) {
            if (array[i] == array[j]) {
                alert("Dados repetidos !")
                return false
            }
        }
    }
}

Link para o comentário
Compartilhar em outros sites

  • 0

Você pode fazer assim:

function nickrepetido() {
    //Array de ítens
    array = new Array();
    array[0] = document.getElementById("eso").value;
    array[1] = document.getElementById("eso2").value;
    array[2] = document.getElementById("eso3").value;
    array[3] = document.getElementById("eso4").value;
    array[4] = document.getElementById("eso5").value;
    //Faz a verificação
    var ok = true;
    for (var i = 0; i < 5; i++) {
        for (var j = i+1; j < 5; j++) {
            if (array[i] == array[j] && array[i]) {
                alert("Dados repetidos !")
                return false
            }
        }
    }
}

Note que o operador AND lógico (&&), se usando com variáveis não-booleanas, irá converter o valor para um tipo booleano. No caso de strings, são convertidas de acordo com sua quantidade de caracteres. Se for 0 (vazia), é convertido para false, caso contrário, true.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...