/ / Descobrindo se há um atributo de nome duplicado - javascript, jquery

Descobrindo se há um atributo de nome duplicado - javascript, jquery

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 № 1

Experimente 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;
}