16

I have created an element using document.getElementsByClassname, and would like to add a onclick event to this element, so that when someone clicks on this element onclick function should be called.

I tried with event listener, but this will execute even when I don't click on any function. Using jQuery we can do that by binding a click event, but I my requirement is in javascript/

Thanks!

element.addEventListener("click", alert('clicked'), false);// Add onclick eventListener 

var element= document.getElementsByClassName('classname');

7 Answers 7

21

getElementsByClassName returns an HTMLCollection, so even though you have only one element with that classname in DOM, you have to retrieve it with index 0:

var element = document.getElementsByClassName('classname')[0];
element.addEventListener("click", function(e) {
    alert('something');
}, false);

Alternatively, since you only have one element with the classname, you can safely use querySelector, which will return the first match element.

var element = document.querySelector('.classname');
                                      ^
element.addEventListener("click", function(e) {
    alert('something');
}, false);

Please note the dot in above code. querySelector accepts a CSS selector string as a parameter.

Sign up to request clarification or add additional context in comments.

2 Comments

IMHO, I would add that if you can assert that you will have only one element with a classname, then it should be an id and not a class
@Logar id implies that you want to identify an HTML element. It doesn't mean every unique element in the document should be labeled with an id. You don't necessarily do this to <html> or <body>, do you? In regards of "semantic web" it's a bad practice.
6

Try this:
document.getElementsByClassName always returns array of elements.

 var element= document.getElementsByClassName('classname');
 for(var i=0;i<element.length;i++){
      element[i].addEventListener("click", function(){alert('clicked')}, false);   
 }

3 Comments

in my case, there are no array of elements, so only one element is there hence I dont need any array. I have used eventlistener but when I deploy this code in the website, while the page is loading my function executes, but I want my function to be executed only when user clicks on the element
Read more about getElementsByClassName developer.mozilla.org/en-US/docs/Web/API/…
exactly as instructed in the given page I have assigned some value to my element. but now the question is, how to I bind a onclick event for the element I have created
2

You have to pass reference of a function instead of adding inline alert.

var element= document.getElementsByClassName('classname');
function doSomething() {
  alert('clicked')
}

// add event listener to element 
element.addEventListener("click", doSomething, false);

Comments

2

You can use .attr() jquery method for this:

$('.classname').attr("onClick", "javascript:alert('clicked'); return false;"); 

Try this

JavaScript

var element= document.getElementsByClassName('classname');
element[0].onclick = function() { alert('Hello'); };//-- here i used "[0]" to refer first matched element 

Try with javascript

3 Comments

thanks for the reply, but I dont want to use jQuery instead I want in native javascript.
you put the jquery tag.
Yes @EoiFirst: OP put Jquery tag.
0

You can use an event delegation or DOMNode.matches.

document.addEventListener('click', function(e) {
   if (e.target.className == 'classname') // if (e.target.matches('.classname'))
   {
       //do something
   }
});

Comments

0
Please try the following:

var rows = 3;
var cols = 3;
var defaultVal=0;
var mainDiv=document.getElementById("mainDiv")
var arr = []
for (var i = 0; i < rows; i++) {
    arr[i] = [];
  for(var j=0;j<cols;j++){
    arr[i][j]=defaultVal++;
    var element=document.createElement("input");
    element.type="button";
    element.className="left";
    element.addEventListener("click", testFunction, false);
    element.value=arr[i][j];
    mainDiv.appendChild(element);


  }


}
function testFunction(){
    alert('hi')
}

//Use element.addEventListener("click", testFunction, false); 
//Use testFunction and not testFunction() as this "()" invokes the function

Comments

0

I was able to add an onclick event to an element using following javascript code

list_title = document.createElement('UL');
list_title.onclick=function() {

    // place your code here
};

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.