Digamos que eu tenha o seguinte;
<input type="text" id="1" name="1" value="" />
<input type="text" id="2" name="2" value="" />
<input type="text" id="3" name="3" value="" />
<input type="text" id="4" name="2" value="" />
Estou tentando ter uma função que consiga descobrir se existe um atributo com o mesmo nome.
Portanto, para este exemplo, uma bandeira vermelha aparecerá id="4"
tem um atributo de nome duplicado.
Eu sei que tenho que fazer algo assim, mas posso estar errando aqui. O que é que vocês acham?
function findDuplicates(name) {
var found = 0;
$("input").each(function() {
if($(this).attr("name") == name)
found++;
});
return found;
}
Respostas:
4 para resposta № 1Experimente o seletor de atributo jQuery:
if(1 < $("input[name=2][type=text]").length) {
//duplicate
}
Portanto, sua função será semelhante a:
function findDuplicates(name) {
return $("input[name="+ name +"]").length;
}
EDITAR
Com JS simples:
function findDuplicates(name) {
return document.getElementsByName(name).length;
}
0 para resposta № 2
Faça um div vazio em algum lugar, digamos que dei ao meu div um id de "return_value".
<script>
function validate(){
var name1 = document.getElementById("1").value;
var name2 = document.getElementById("2").value;
var name3 = document.getElementById("3").value;
var name4 = document.getElementById("4").value;
var error = "";
error = (name1 == name2 || name1 == name3 || name1 == name4 || name2 == name3 || name2 == name4 || name3 == name4) ? "Duplicate Entry!" : "Data OK!";
getElementById("return_value").innerHTML = error;
}
</script>
Você acabou de fazer seu formulário de envio chamar oFunção Javascript para fazer a comparação, se você deseja realmente enviar o formulário se os dados forem válidos, você pode fazer isso usando AJAX. O autor da postagem anterior está correto no sentido de que é difícil responder a isso sem mais informações sobre o que você está tentando fazer especificamente.
0 para resposta № 3
var found = 0;
var array = new Array(); //create new array
$( "input[type=text]" ).each(function( index ) {
var name = $(index).attr("name"); //get name of current element
if(array.indexOf(name) == -1) //check if name doesn"t exist in array
{
array.push(name); //if true, add it to the array
} else {
found++; //if it exists, increment found
var duplicate = $(index).attr("id"); //get the id of the current element
console.log("Input with Id = " + duplicate + " has a duplicate name attribute");
}
});
0 para a resposta № 4
Se você menos 1 do comprimento, poderá retornar um 0 sem duplicatas.
Também passei o elemento e o nome do atributo para capacidade de reutilização completa.
function hasDuplicates(el, attr, value) {
return $(el + "[" + attr + "=" + value + "]").length - 1;
}