I am very new to javascript I know that you can add an onclick="" event to a html element... but is it possible in the javascript itself to declare that when someone clicks on x element an event is triggered?
3 Answers
<input id="myElement" type="button" value="Click me!" />
<script type="text/javascript">
document.getElementById('myElement').onclick = function () {
alert('Hello, world!');
}
</script>
Make sure that you either run this after the element already exists (scripts at the bottom), or when the DOM is ready. (You could use window.onload for that, but you might just want to use jQuery from the beginning so that, among other things, you get a magical DOM-ready function. onload has some downsides, like waiting for images to load.)
6 Comments
Russ Cam
might want to add a note about the pre-conditions for when the script should run i.e. when the element exists in the DOM
Matchu
Good catch - order switched, expanded.
Russ Cam
+1 - there's a js-only domReady implementation here - books.google.com/… see Listing 5-12 :)
Russ Cam
might also want to add in some code to ensure that a function assigned to
onclick already is not overwritten by assigning a new event handler... perhaps take a look at Dean Edward's addEvent library? - dean.edwards.name/weblog/2005/10/add-event or a variation on itMatchu
I'll let the OP handle that if he really needs it - but thanks! :)
|
You would be best to leverage jQuery for this. It's easy to learn and easy to use.
4 Comments
Javier
Unless the OP wants to do something complicated, I think jQuery would be overkill.
MLefrancois
Jquery is definetly not overkill since it will take care of multi-browser issue for the most part
Keith Adler
getElementById will not work the same in all browsers. For example, in IE8 it's case sensitive and in prior versions it's not W3C compliant and has all types of known issues. It's not just IE that's problematic however. There's logic in your statement about less is more, but jQuery is a layer that ensures compatibility across user agents and is well worth leveraging.
Russ Cam
Unobtrusive JavaScript I agree, jQuery necessarily for this case only, I don't.
Quite possibly the best method is event listeners
<button id="x">click on me</button>
<script src="main.js">
const button =
document.getElementById("x");
button.addEventListener("click" () => {
alert("hello world")
})
/*
it might not be as good in small
projects, but in large ones, this
saves a ton of time.
*/
</script>