Friday, May 10, 2024
 Popular · Latest · Hot · Upcoming
39
rated 0 times [  46] [ 7]  / answers: 1 / hits: 50065  / 15 Years ago, tue, may 12, 2009, 12:00:00

How to make onclick without jQuery, with no extra code in HTML, such as:



<a href=# onclick=tramtramtram>


Just using an external js file?



<script type=text/javascript src=functions.js></script>





I need to replace this code:



$(a.scroll-up, a.scroll-down).click(function(){
SNavigate($(this).attr(href).substr(7));return false;
});

More From » onclick

 Answers
11

When this anchor will contain only one function to handle on click, than you can just write



document.getElementById('anchorID').onclick=function(){/* some code */}


otherwise, you have to use DOM method addEventListener



function clickHandler(){ /* some code */ }
var anchor = document.getElementById('anchorID');
if(anchor.addEventListener) // DOM method
anchor.addEventListener('click', clickHandler, false);
else if(anchor.attachEvent) // this is for IE, because it doesn't support addEventListener
anchor.attachEvent('onclick', function(){ return clickHandler.apply(anchor, [window.event]}); // this strange part for making the keyword 'this' indicate the clicked anchor


also remember to call the above code when all elements are loaded (eg. on window.onload)



-- edit



I see you added some details. If you want to replace the code below



$(a.scroll-up, a.scroll-down).click(function(){SNavigate($(this).attr(href).substr(7));return false;});


with sth that doesn't use jQuery, this should do the job



function addEvent(obj, type, fn) {
if (obj.addEventListener)
obj.addEventListener(type, fn, false);
else if (obj.attachEvent)
obj.attachEvent('on' + type, function() { return fn.apply(obj, [window.event]);});
}
addEvent(window, 'load', function(){
for(var i=0, a=document.anchors, l=a.length; i<l;++i){
if(a[i].className == 'scroll-up' || a[i].className == 'scroll-down'){
addEvent(a[i], 'click', function(e){ SNavigate(this.href.substr(7)); e.returnValue=false; if(e.preventDefault)e.preventDefault();return false});
}
}
});

[#99551] Thursday, May 7, 2009, 15 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
miles

Total Points: 256
Total Questions: 111
Total Answers: 104

Location: Benin
Member since Fri, Mar 24, 2023
1 Year ago
;