1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
var Fenster = null; function neuesFenster(meineSeite,meinName,w,h,scroll){ LeftPosition = (screen.width) ? (screen.width-w)/2 : 0; TopPosition = (screen.height) ? (screen.height-h)/2 : 0; settings = 'height='+h+',width='+w+',top='+TopPosition+',left='+LeftPosition+',scrollbars='+scroll+',resizable' Fenster = window.open(meineSeite,meinName,settings) } function AddEventListener(element, eventType, handler, capture) { if (element.addEventListener) element.addEventListener(eventType, handler, capture); else if (element.attachEvent) element.attachEvent("on" + eventType, handler); } window.onload = function() { AddEventListener(document.getElementById("mr"), "mouseover", function(e) { zeigbild('mr'); }, AddEventListener(document.getElementById("ib"), "mouseover", function(e) { zeigbild('ib'); }, AddEventListener(document.getElementById("fr"), "mouseover", function(e) { zeigbild('fr'); }, AddEventListener(document.getElementById("nh"), "mouseover", function(e) { zeigbild('nh'); }, AddEventListener(document.getElementById("fz"), "mouseover", function(e) { zeigbild('fz'); }, AddEventListener(document.getElementById("mm"), "mouseover", function(e) { zeigbild('mar'); }, AddEventListener(document.getElementById("je"), "mouseover", function(e) { zeigbild('je'); }, AddEventListener(document.getElementById("db"), "mouseover", function(e) { zeigbild('db'); }, AddEventListener(document.getElementById("ms"), "mouseover", function(e) { zeigbild('ms'); },false))))))))); }; function zeigbild(q){ document.getElementById('foto').setAttribute('src','0'+q+'.jpg') }
Refactorings
No refactoring yet !
naholyr
November 6, 2007, November 06, 2007 16:32, permalink
I would use a Hash to reduce code and ease maintainability
I also use AddEventListener instead of window.onload : if you want to add more events to your window.onload, you can this way.
Here is my refactoring for the code after declaration of AddEventListener
Note that you could have more gains using prototype.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
var thumbnailsToImage = { 'mr' : '0mr.jpg', 'ib' : '0ib.jpg', 'fr' : '0fr.jpg', 'nh' : '0nh.jpg', 'fz' : '0fz.jpg', 'mar': '0mar.jpg', 'je' : '0je.jpg', 'db' : '0db.jpg', 'ms' : '0ms.jpg', 'mr' : '0mr.jpg', 'mr' : '0mr.jpg', 'mr' : '0mr.jpg', }; AddEventListener(window, "load", function() { for (thumbnailID in thumbnailsToImage) { AddEventListener(document.getElementById(thumbnailID), 'mouseover', function() { zeigbild(thumbnailID); }); } }); function zeigbild(thumbnailID){ document.getElementById('foto').setAttribute('src', thumbnailsToImage[thumbnailID]); }
Rob Womack
November 7, 2007, November 07, 2007 14:42, permalink
Since you have a naming convention set for your rollovers, you don't need to set a hash, or even to identify them by name. Give all your elements a common class name, like 'zeigbild-over', then call getElementsByClassName and assign the onmouseover event to each element returned. This way, to add a new element, just give it the appropriate class name and make sure the correctly named img file is uploaded.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
// getElementsByClassName borrowed from Stephen Chapman // (http://javascript.about.com/library/bldom08.htm) document.getElementsByClassName = function(cl) { var retnode = []; var myclass = new RegExp('\\b'+cl+'\\b'); var elem = this.getElementsByTagName('*'); for (var i = 0; i < elem.length; i++) { var classes = elem[i].className; if (myclass.test(classes)) retnode.push(elem[i]); } return retnode; }; AddEventListener(window, "load", function() { var elements = document.getElementsByClassName('a'); for (el in elements) { elements[el].onmouseover = function() { document.getElementById('foto').setAttribute('src', '0' + this.id + 'jpg'); }; } });
I am pretty new to javascript, i wrote a javascript which changes a picture in html if the user goes over the names of list (identified by id). Any suggestion to refactor the code?