What I want is to create my own function that will be bound as an event listener similar to how other event listeners (e.g., onclick) are set:
<input type="text" onMyFunction="alert('hi');" />
Is it possible and if so how?
Advertisement
Answer
The problem you have is the browser does not realize it is a function in there. It is a string, the only way you can make it a function is to assign it as a function.
One way is either on document ready or onload, you query the document for elements with the attribute and reassign it.
HTML
<input id="foo1" type="text" onMyFunction="alert(this.value);" value="1"/> <input id="foo2" type="text" onMyFunction="alert(this.value);" value="2"/>
JavaScript
var winLoad = window.onload;
window.onload = function(){
var i,
elem,
fncStr,
elems = document.querySelectorAll("[onMyFunction]");
if (winLoad) {
winLoad();
}
for (i=0;i<elems.length;i++) {
elem = elems[i];
fncStr = elem.getAttribute("onMyFunction");
elem.onMyFunction = new Function(fncStr);
}
var tb1 = document.getElementById("foo1");
tb1.onMyFunction();
}
This code uses querySelectorAll which is not supported in all browsers.