Search code examples
javascriptdraggableaddeventlistenergetelementsbytagnamehtml5-draggable

addEventListener to an article element in Javascript


I am trying to addEventListener to all article elements so when they are clicked it turns them into a draggable element.

I'm not using jQuery on this task.

Attempt 1:

document.getElementsByTagName("ARTICLE").addEventListener('click', function(){
document.getElementsByTagName("ARTICLE").setAttribute('draggable', true);});

Attempt 2:

function draggableTrue() {
    var addDrag = document.getElementsByTagName("article");
    addDrag.setAttribute('draggable', true);
}

//add event listener to articles
var draggableArticles = document.getElementsByTagName("article");
draggableArticles.addEventListener('onclick', draggableTrue);

In both I am getting a "Uncaught TypeError: undefined is not a function" which usually points out I am missing something, but after reading up I can't figure out what.


Solution

  • document.getElementsByTagName returns a collection. So you need to iterate over it to add the event listeners. This collection is native DOM nodes collections and not a jquery collection hence you cannot use the addEventListener on the collection.

    var articles = document.getElementsByTagName("ARTICLE");
    var eventListener = function(){console.log('clicked an articles')}
    
    for(var i=0; i<articles.length; i++){
        articles[i].addEventListener('click', eventListener );
    }