Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to find duplicate id's in a form?

Tags:

html

forms

field

I've created a form with about 800 fields in it. Unknowingly I've given same id for few fields in the form. How to trace them?

like image 366
Vamsi Avatar asked Jul 26 '12 07:07

Vamsi


4 Answers

The http://validator.w3.org/ will be the handy solution. But using jquery you can do something like this:

//See your console for duplicate ids

$('[id]').each(function(){
  var id = $('[id="'+this.id+'"]');
  if(id.length>1 && id[0]==this) {
    console.log('Duplicate id '+this.id);
    alert('duplicate found');
  }
});

Hope this helps.

like image 158
AlphaMale Avatar answered Oct 16 '22 18:10

AlphaMale


This might help you

Source: Finding duplicate ID’s on an HTML page

Finding duplicate ID’s on an HTML page

Written by Eneko Alonso on May 6, 2011

Looks like sometimes we forgot element ID’s are meant to be unique on a HTML page. Here is a little bit of code I just wrote to find duplicate ID’s on a page (run the code on your browser’s javascript console):

var idList = {};
var nodes = document.getElementsByClassName('');
for (var i in nodes) {
  if (!isNaN(i) && nodes[i].id) {
    idList[nodes[i].id] = idList[nodes[i].id]? idList[nodes[i].id]+1:1;
  }
}
for (var id in idList) {
  if (idList[id] > 1) console.log("Duplicate id: #" + id);
}
like image 31
Christos312 Avatar answered Oct 16 '22 17:10

Christos312


I've created an example for you to have a look at, it finds all of the duplicate IDs within a form/element on a page and prints the duplicates ID names to the console.

The array contains method was taken from this post.

<html>
    <body>
        <form id="frm">
            <input type="text" id="a" />
            <input type="text" id="b" />
            <input type="text" id="c" />
            <input type="text" id="d" />
            <input type="text" id="e" />
            <input type="text" id="f" />
            <input type="text" id="a" />
            <input type="text" id="h" />
            <input type="text" id="i" />
            <input type="text" id="j" />
            <input type="text" id="d" />
            <input type="text" id="l" />            
        </form>
    </body>
    <script type="text/javascript">
        Array.prototype.contains = function(obj) { //Add a 'contains' method to arrays
            var i = this.length;
            while (i--) {
                if (this[i] === obj) {
                    return true;
                }
            }
            return false;
        }

        frm = document.getElementById('frm'); //Get the form
        els = frm.getElementsByTagName('input'); //Get all inputs within the form

        ids = new Array(els.length); //Create an array to hold the IDs

        for(e = 0; e < els.length; e++) { //Loop through all of the elements
            if(ids.contains(els[e].id)) //If teh array already contains the ID we are on
                console.log('Duplicate: '+els[e].id); //Print 'Duplicate: {ID}' to the console

            ids.push(els[e].id); //Add the ID to the array
        }

    </script>
</html>

The above code will output the following:

Duplicate: a

Duplicate: d

like image 40
vimist Avatar answered Oct 16 '22 17:10

vimist


One-ish liner using just array methods:

[].map.call(document.querySelectorAll("[id]"), 
     function (e) {
        return e.id;
     }).filter(function(e,i,a) {
        return ((a.lastIndexOf(e) !== i) && !console.log(e));
     })

Logs every duplicate and returns an array containing the ids if any were found.

like image 26
user3290617 Avatar answered Oct 16 '22 16:10

user3290617