quote:Op maandag 11 december 2006 23:39 schreef Litpho het volgende:
[..]
Geef je aan de functie alleen de buttonnaam mee, of het buttonobject (evt. opgehaald met iets als document.getElementById)?
Deze OP: http://wiki.fok.nl/index.php/OP/Javascriptquote:Op maandag 11 december 2006 23:41 schreef mschol het volgende:
[..]
alleen button naam m.b.v. this.name
1 2 3 4 5 6 7 | { var btn = document.getElementById(button); newWindow = window.open('add.php?path='+place+'&file='+file,"add_file","status=0,menubar=0,height=250,width=100,top=60px,left=100px"); btn.disabled=true; newWindow.focus(); } |
ik loop altijd met dit verschil te vechten, en nog steeds vergeet ik hetquote:Op maandag 11 december 2006 23:46 schreef Litpho het volgende:
Ah. Je probeert een property (disabled) te veranderen van een buttonobject maar in plaats daarvan zet je een property (disabled) van een stringobject.
Kijk of je in je HTML-code dezelfde buttonnaam ook als id kan opnemen en neem in je javascript de volgende code op:
[ code verwijderd ]
1 2 3 | button.disabled = true; } |
1 |
Er was een reden dat ik erbij zette dat je de naam ook als id-waarde moest opnemen in je HTMLquote:Op dinsdag 12 december 2006 00:02 schreef SuperRembo het volgende:
En de name doorgeven en dan getElementById() gebuiken lijkt me ook niet handig. Misschien dat het in IE werkt, maar in FF uiteraard niet (en terecht!).
name doorgeven werkt ook niet, id doorgeven daarin tegen werkt vlekkeloos..quote:Op dinsdag 12 december 2006 00:02 schreef SuperRembo het volgende:
Waarom de name of id doorgeven als je de button zelf al kent?
[ code verwijderd ]
[ code verwijderd ]
En de name doorgeven en dan getElementById() gebuiken lijkt me ook niet handig. Misschien dat het in IE werkt, maar in FF uiteraard niet (en terecht!).
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 64 65 66 67 68 | var element = document.getElementById(objectId); for (var x = 1; element.childNodes.length > 0; x++){ element.removeChild(element.firstChild); } for(var i = 1; i <= numberOfElements; i++){ createNewElement(objectId, "", "input", {type: "file", name: "uploadFile[]"}, ""); } } function createNewElement(parent, beforeWhat, name, attrs, text) { var parent = document.getElementById(parent); try { /* IE fix for input elements */ if (attrs){ var attributes = "<" + name +" "; for (key in attrs) { attributes += key +"=""+ attrs[key] +"" "; } attributes += ">"; } var e = document.createElement(attributes); } catch (element) { } if (!e || e.nodeName != type.toUpperCase()) { var e = document.createElement(name); if (attrs) { for (key in attrs) { switch(key){ case "class": e.className = attrs[key]; break; case "id": e.id = attrs[key]; break; case "name": break; default: e.setAttribute(key, attrs[key]); } } } } if (text) { e.appendChild(document.createTextNode(text)); } if(beforeWhat != ""){ var beforeWhat = document.getElementById(beforeWhat); parent.insertBefore(e, beforeWhat); } else{ parent.appendChild(e); } } |
1 |
1 |
dat was FOK!, niet ikquote:Op zaterdag 30 december 2006 23:38 schreef SuperRembo het volgende:
Hier heb je lopen klooten met quotjes:
[ code verwijderd ]
dat zal hem wellicht zijn iddquote:Hier bestaat 'type' niet, zal waarschijnlijk iets met attrs['type'] moeten zijn
[ code verwijderd ]
Persoonlijk vind ik browsersniffing nog ranziger en onderhoudsonvriendelijkerquote:Beetje lomp om zo'n heel blok in een try/catch te zetten terwijl je makkelijk kan bepalen of je met IE te maken hebt. Dan hoeven andere browsers niet onnodig die code uit te voeren die toch niet gaat werken.
persoonlijke smaakquote:En wat een ranzige uitlijning van je code
Leuke linkquote:
vind ik ook maar das zoals eerder gezegd persoonlijke smaak,quote:Op zaterdag 30 december 2006 23:38 schreef SuperRembo het volgende:
En wat een ranzige uitlijning van je code
1 2 3 4 5 6 7 8 9 10 11 12 | var oldBodyText, newBodyText, reg; oldBodyText = document.body.innerHTML; reg = /<abbr([^>]*)>([^<]*)</abbr>/g; newBodyText = oldBodyText.replace(reg, '<abbr $1><span class="abbr" $1>$2</span></abbr>'); document.body.innerHTML = newBodyText; } window.onload = function(){ styleAbbr() } |
1 |
1 2 3 4 5 6 7 8 | <script type="text/javascript"> window.onload = function() { var b = document.body; b.innerHTML = b.innerHTML.replace(/<abbr([^>]*)>([^<]*)<\/abbr>/gi, '<abbr $1><span class=\"abbr\" $1>$2</span></abbr>'); } </script> <![endif]--> |
quote:<p id="player1881">
<a href="http://www.macromedia.com/go/getflashplayer">Get the Flash Player</a> to see this player.
</p>
<script type="text/javascript">
var FO = {
movie:"player.swf",
width:" 200" ,
height:"200",
majorversion:"7",
build:"0",
bgcolor:"#FFFFFF",
flashvars:"file=/lynx/uploads/Flash/test.flv&showdigits=true&backcolor=0xABD7FE&showicons=true&image=bla.jpg"
};
UFO.create(FO, "player1881");
</script>
Niet al te ongeduldig doen he.quote:
Met een cookie?quote:Op woensdag 7 februari 2007 19:50 schreef Chandler het volgende:
Leuke vraag denk ik:
Stel ik wil een POPUP op een website en deze popup wil ik maar 1x laten zien! nu hebben genoeg mensen een popup blokker dus als mensen de pagina reloaden dan krijgen ze de popup niet meer te zien. Nu wil ik alleen de popup laten verdwijnen als de popup daadwerkelijk is geopend.. hoe realiseer ik dit?
Je kunt de popup het koekje laten bakkenquote:Op donderdag 8 februari 2007 09:25 schreef Chandler het volgende:
Cookie wordt toch ook aangemaakt wanneer de popup zich niet laat zien?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | function popUp() { day = new Date(); id = day.getTime(); window['page'+id] = window.open('popback1.html', id , 'toolbar=0,scrollbars=1,location=0,statusbar=1,menubar=0,resizable=0'); } </script> <form method="post" name="userinfo"> <input type="text" name="name"><br/> <input type="text" name="cijfer"> - <a href="#" onClick="javascript:popUp();">Select</a><br/> <input type="submit" name="send" value="Verstuur"> </form> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | function returnVariable(formName, fieldName, content) { opener.document.forms[formName].elements[fieldName].value = content; } function wclose() { window.close(); } </script> <form name="cijfertjes"> <input type="text" name="cijfer"> <input type="submit" name="Verzend" onclick="returnVariable('userinfo','cijfer', this.form.elements['cijfer'].value); wclose();"> </form> |
1 2 3 | var returnvar='cijfer'; ...window.open('popback1.html?returnvar='+returnvar... |
1 2 | onclick=returnvariable(opener.returnform, opener.returnvar, this.form.elements['cijfer'].value)" |
1 2 3 | var returnform='userinfo'; var returnvar='cijfer'; |
1 2 3 4 5 6 7 8 9 10 11 12 | function colPalet(value) { day = new Date(); id = day.getTime(); var retvalue = value; window['page'+id] = window.open('./layout/layout_colors.html?varname=' + value, id , 'width=300,height=200,toolbar=0,scrollbars=1,location=0,statusbar=1,menubar=0,resizable=0'); } </script> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | function returnVariable(fieldName, content) { opener.document.forms['colortable'].elements[fieldName].value = content; } function wclose() { window.close(); } function SendColor(value) { alert(opener.retvalue); returnVariable(opener.varname, value) } </script> <MAP name=map_webpal> <!--- Row 1 ---> <AREA shape=RECT coords=2,2,18,18 href="javascript:SendColor('#330000')"> ... etc |
1 |
1 2 3 4 5 6 7 | var newdate = new Date(currentdate.substring(6,10), currentdate.substring(3,5) - 1, currentdate.substring(0,2)); newdate.setTime(newdate.getTime() - 86400000); newday = newdate.getDate(); newmonth = newdate.getMonth() +1; newyear = newdate.getFullYear(); changevalue(newday + "-" + newmonth + "-" + newyear,'chosendate'); |
1 2 | if (newmonth<=9) newmonth = "0" + newmonth; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | var currentdate = document.getElementById('chosendate').value; var newdate = new Date(currentdate.substring(6,10), currentdate.substring(3,5) - 1, currentdate.substring(0,2)); if (dir == 'left') newdate.setTime(newdate.getTime() - 86400000); else if (dir == 'right') newdate.setTime(newdate.getTime() + 86400000); newday = newdate.getDate(); if (newday<=9) newday = "0" + newday; newmonth = newdate.getMonth() +1; if (newmonth<=9) newmonth = "0" + newmonth; newyear = newdate.getFullYear(); changevalue(newday + "-" + newmonth + "-" + newyear,'chosendate'); } |
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 | Converts the date to string using provided formatting. %D = full date (%d/%m/%Y) %T = full time (%H:%i:%s) %Y = year (4 digits) %y = year (2 digits) %m = month (01 - 12) %d = day (01 - 31) %H = hours (01 - 24) %h = hours (01 - 12) %i = minutes (01 - 59) %s = seconds (01 - 59) %A = AM/PM %% = % */ Date.prototype.format = function(format) { format = format.replace(/%D/g, "%d/%m/%Y"); format = format.replace(/%T/g, "%H:%M:%S"); format = format.replace(/%Y/g, this.getFullYear()); format = format.replace(/%y/g, (this.getFullYear() % 100).toString().padLeft(2, '0')); format = format.replace(/%m/g, (this.getMonth () + 1).toString().padLeft(2, '0')); format = format.replace(/%d/g, this.getDate().toString().padLeft(2, '0')); format = format.replace(/%H/g, this.getHours().toString().padLeft(2, '0')); format = format.replace(/%h/g, ((this.getHours() + 11) % 12 + 1)); format = format.replace(/%i/g, this.getMinutes().toString().padLeft(2, '0')); format = format.replace(/%s/g, this.getSeconds().toString().padLeft(2, '0')); format = format.replace(/%A/g, (this.getHours() < 12 ? "AM" : "PM")); format = format.replace("%%", "%"); return format; } /* Pads a string on the left to a certain length with another string. */ String.prototype.padLeft = function(length, padding) { if (padding == '' || padding == null) padding = ' '; var result = this; var n = (length - this.length); if (n > 0) { while (padding.length < n) { padding += padding; } result = padding + result; result = result.substr(length - result.length); } return result; } |
1 2 3 | var s = d.format('%D %T'); alert(s); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <head> <title>test</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript"> document.getElementById('display').innerHTML= 'test'; </script> </head> <body> <div id="display" name="display"> leeg </div> </body> </html> |
Ik begrijp niet wat ik fout doe?quote:document.getElementById('display') has no properties
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <head> <title>test</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <script type="text/javascript"> function test(){ document.getElementById('display').innerHTML= 'test'; } </script> </head> <body onload="test()"> <div id="display" name="display"> leeg </div> </body> </html> |
Dit is de versimpelde versie, hij wordt aangeroepen door een functie die na een submit wordt aangeroepen.quote:Op dinsdag 27 februari 2007 16:08 schreef Geqxon het volgende:
Zo uit mijn hoofd zou ik zeggen dat het niet werkt omdat het javascript uitgevoerd wordt nog voordat de div "display" op het scherm getekend is / geinitialiseerd is. Misschien er een functie van maken, en die in de onload gooien?
1 |
1 2 3 4 5 6 7 | { var fso = new ActiveXObject("Scripting.FileSystemObject"); var FileObject = fso.OpenTextFile("C:\Temp\PimFile.txt", 2, true,0); // 8=append, true=create if not exist, 0 = ASCII FileObject.write(sText) FileObject.close() } |
1 2 | inhoud.replace("n","rn"); |
nee met document.naam.valuequote:Op woensdag 28 februari 2007 09:10 schreef Geqxon het volgende:
En hoe roep je sText aan, met een "this.value" ?
Als workaround zou je kunnen werken met een string replace:
[ code verwijderd ]
1 |
quote:Op woensdag 28 februari 2007 09:16 schreef Swetsenegger het volgende:
hij kan ik trouwens een string aanvullen met 0'en tot een bepaalde lengte?
1 2 3 4 5 6 7 8 | var teststring = 'jan'; var padlength = 20; var stringlength = teststring.length; for (var i = 0; i < (padlength - stringlength); i++){ teststring += pad; } |
Ah ok, er is geen standaard functie dusquote:Op woensdag 28 februari 2007 09:25 schreef Geqxon het volgende:
[..]
[ code verwijderd ]
Zo uit mijn hoofd, moet het nog even debuggen. Helaas heeft javascript niet een soort van str_pad (string pad), in ieder geval niet voor zover ik dat kan zien.
/edit: Denkfoutje gefixt.
1 2 3 4 5 6 7 | var teststring = 'jan'; var padlength = 20; while (teststring.length < padlength){ teststring += pad; } |
1 2 3 4 5 6 7 | { if (char==null) char='_'; var t=this; while(t.length<len) t+=char; return t; }; |
1 2 3 | document.write(str.pad(10,'x')); //writes halloxxxxx; document.write(str.pad(10)); //writes hallo_____; |
Dit is zeker handig zeg!quote:Op woensdag 28 februari 2007 10:38 schreef ralfie het volgende:
[ code verwijderd ]
krijgen je strings een handige pad functie erbij
[ code verwijderd ]
Altijd makkelijk als je zoiets vaker moet gebruiken
Default padden met een underscore vind ik een beetje vreemd (is natuulijk makkelijk aan te passen). Als de padding langer is dan 1 teken dan klopt de lengte niet altijd. Als je veel moet padden kan ie wel eens langzaam worden.quote:Op woensdag 28 februari 2007 10:38 schreef ralfie het volgende:
[ code verwijderd ]
krijgen je strings een handige pad functie erbij
[ code verwijderd ]
Altijd makkelijk als je zoiets vaker moet gebruiken
*bekijkt code*quote:Op woensdag 28 februari 2007 13:56 schreef SuperRembo het volgende:
Als de padding langer is dan 1 teken dan klopt de lengte niet altijd.
als je padding bijv 3 tekens is, wordt de uiteindelijke string langer als wat ie had moeten zijn, bijquote:Op woensdag 28 februari 2007 15:13 schreef Swetsenegger het volgende:
[..]
*bekijkt code*
die snap ik niet?
1 2 3 | str.pad(10,"hoi") // geeft hallohoihoi, wat 11 tekens is |
Ik had er nog niet eens bij nagedacht dat je padding langer zou willen maken dan 1 teken, maar ja... dan heb je inderdaad een probleem.quote:Op woensdag 28 februari 2007 15:41 schreef ralfie het volgende:
[..]
als je padding bijv 3 tekens is, wordt de uiteindelijke string langer als wat ie had moeten zijn, bij
[ code verwijderd ]
Wat op te lossen is door met de substrings van de padding te gaan werken, en te breaken als de lengte te lang is.quote:Op woensdag 28 februari 2007 15:41 schreef ralfie het volgende:
[..]
als je padding bijv 3 tekens is, wordt de uiteindelijke string langer als wat ie had moeten zijn, bij
[ code verwijderd ]
quote:Op woensdag 28 februari 2007 15:45 schreef Geqxon het volgende:
[..]
Wat op te lossen is door met de substrings van de padding te gaan werken, en te breaken als de lengte te lang is.
1 |
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 | String.prototype._padHelper = function(totalLength, paddingString, isRightPadding) { var padding = paddingString; if (!padding || padding.length == 0) padding = ' '; var s = this.toString(); var padLength = totalLength - s.length; if (totalLength >= 0) { while (padding.length < padLength) padding += padding; if (isRightPadding) { s += padding.substr(padding.length - padLength); } else { s = padding.substr(0, padLength) + s; } } return s; }; // Pads a string on the left with a specified padding string to a specified total length. String.prototype.padLeft = function(totalLength, paddingString) { return this._padHelper(totalLength, paddingString, false); }; // Pads a string on the right with a specified padding string to a specified total length. String.prototype.padRight = function(totalLength, paddingString){ return this._padHelper(totalLength, paddingString, true); }; |
1 2 3 4 5 6 7 8 9 | out.push('foo'.padLeft(5)); out.push('foo'.padLeft(5, 'x')); out.push('foo'.padRight(5)); out.push('foo'.padRight(5, 'x')); out.push('foobarbaz'.padLeft(5, 'x')); out.push(''.padLeft(5, 'x')); out.push(''.padLeft(5, '')); alert('"' + out.join('"\n"') + '"'); |
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 | function elf_proef(id) { var bankrekeningnummer = document.getElementById(id).value; //Verwijder alle tekens die geen cijfers zijn bankrekeningnummer = bankrekeningnummer.replace(/D/g, ""); aantal_tekens = bankrekeningnummer.length; var som=0; // loop door de 9 cijfers met de 11 proef formule for (i=1; i<10; i++) { getal=bankrekeningnummer.charAt(i-1); som+=getal*(10-i); } // geef resultaat van check terug if (som % 11==0 && aantal_tekens==9) { document.getElementById(id).value = bankrekeningnummer; return true; } else { alert('Dit is geen geldig bankrekeningnummer!'); document.getElementById(id).value = bankrekeningnummer; document.getElementById(id).focus(); } } </script> |
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 | var first = string.charAt(0); if( (first=="P") || (first=="p") ){ var error = postbank(string); } else { var error = bankrekening(string); } return error; } function bankrekening(string) { deel1=string.substring(0,3) deel2=string.substring(4,11) controle_getal=eval(string.substring(12,14)) getal=eval(deel1+deel2) if (getal%97==controle_getal){}//{window.alert("het rekeningnummer is juist")} else{ return "Het veld Banknummer is onjuist.n"; } } function postbank(string) { if (string.length<3) { return "Het veld Banknummer te kort voor postbanknummer.n"; } else if(string.length>7) { return "Het veld Banknummer te lang voor postbanknummer.n"; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | function colorOver(div){ if(document.getElementById(div).style.background!="green"){ document.getElementById(div).style.background="white" } } function colorOut(div){ if(document.getElementById(div).style.background!="green"){ document.getElementById(div).style.background="blue" } } function colorUp(div){ document.getElementById(div).style.background="green" } </script> |
1 |
1 |
1 2 3 4 5 6 7 | function colorOver(div){ if (div.style.background != 'green') { div.style.background = "white"; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | { var link = event.target; var inputvalue = link.value; var next_node = nextNode(link); if (inputvalue.length + 1 < link.getAttribute('maxlength')) { return false; } while (next_node.nodeName != link.nodeName && next_node != null) { next_node = nextNode(next_node); } if (next_node != null) { next_node.focus(); } } |
1 2 3 4 5 6 7 | { if (inputs[i].hasAttribute('maxlength')) { inputs[i].addEventListener('keypress', auto_focus, false); } } |
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 | { var x; if (window.ActiveXObject) { x = new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) { x = new XMLHttpRequest(); } return x; } var request = makeObject(); //AJAX the content var $url; var $div; function check_content($url,$div){ request.open('get', $url); request.onreadystatechange = parseCheck_content($div); request.send('');} function parseCheck_content($div){ if(request.readyState == 1){ document.getElementById($div).innerHTML = 'Loading...<br/><img src="spinner.gif" alt=""/>'; } if(request.readyState == 4){ var answer = request.responseText; document.getElementById($div).innerHTML = answer; }} |
1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 | request.open('get', $url); request.onreadystatechange = function() { if (request.readyState == 1) { document.getElementById($div).innerHTML = 'Loading...<br/><img src="spinner.gif" alt=""/>'; } if (request.readyState == 4){ var answer = request.responseText; document.getElementById($div).innerHTML = answer; } } request.send(''); } |
1 2 3 | document.getElementById("navigatierechts").innerHTML = '<?php echo $NAVIGATIE_rechts; ?>'; </script> |
1 2 3 | $NAVIGATIE_rechts .='<li><a href="#" onClick="showHint(\\\'ARTIKELEN\\\')">ARTIKELEN</a></li>'; ?> |
1 2 3 | document.getElementById(aap+noot).value = "Mies!"; } |
1 2 3 4 5 | for (var i = 0; i <= 2; i++){ document.getElementById(aap+i).value = noot; } } |
1 2 3 | document.getElementById(field+counter).value = document.getElementById(field+id).value; } |
1 2 3 4 | for (var i=start; i<=end; i++){ document.getElementById(field+i).value = document.getElementById(field+id).value; } |
Da's geen enkel probleemquote:Op vrijdag 23 maart 2007 17:44 schreef veldmuis het volgende:
Ik heb een stukje HTML waarin ik meerdere foto's in dezelfde pagina om de beurt wil weergeven. Kan ik dan in JS iets van een array maken met de bestandsnamen en dat ik dan op 'volgende' kan klikken dat de volgende foto geladen wordt, of eventueel heel het HTML bestand opnieuw inclusief de volgende foto?
1 2 3 4 5 | <script> document.getElementById('tekstveld').innerHTML = "Hoi!"; </script> |
PHP-gegenereerd AJAX met SQL backend natuurlijkquote:Op zaterdag 24 maart 2007 23:00 schreef CraZaay het volgende:
Want dan denk je een betere user experience te bieden door de pagina steeds te herladen?
Nee, dan denk ik in een kortere tijd een beter werkende pagina te maken. Javascript biedt zeker voordelen, maar het is (met mijn kennis) erg lastig als het snel af moet. Als ik tijd heb ga ik er wel eens naar kijken, voorlopig even niet. Jullie zien me nog terug hier!quote:Op zaterdag 24 maart 2007 23:00 schreef CraZaay het volgende:
Want dan denk je een betere user experience te bieden door de pagina steeds te herladen?
Ik gebruik nog zelden PHP, maar zit dat er voortaan native in ja?quote:Op zaterdag 24 maart 2007 23:01 schreef Litpho het volgende:
[..]
PHP-gegenereerd AJAX met SQL backend natuurlijk.
Geen idee. Ik gebruik absoluut géén PHP, maar je hebt uiteraard niet noodzakelijk een framework nodig om AJAX te implementeren, je loopt alleen zonder het risico dat het na verloop van tijd enigszins onoverzichtelijk wordt.quote:Op maandag 26 maart 2007 13:28 schreef CraZaay het volgende:
[..]
Ik gebruik nog zelden PHP, maar zit dat er voortaan native in ja?
Een copy/paste van mijn huidige situatie:quote:Op woensdag 28 maart 2007 09:41 schreef SuperRembo het volgende:
In Firefox heb je de naturalWidth en naturalHeight properties waarmee je de goede hoogte kan berekenen. In IE kan je even een nieuwe img maken en daar de width en height van opvragen om de echte afmetingen te achterhalen.
Zie de scaleImage functie van FOK:)
1 2 3 | image.src = null; image.src = "http://www.server.com/"+directory+"/"+imageurl+".jpg"; |
1 2 3 | thumb.width = thumb.width / (thumb.height/100);; thumb.height = 100; |
1 |
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 | { if (str.length > 0) { var url="ajax/updatepulldownEenheid.php?sid=" + Math.random() + "&id=" + str xmlHttp=GetXmlHttpObject(pulldownEenheidChanged) xmlHttp.open("GET", url , true) xmlHttp.send(null) } else { } } function pulldownEenheidChanged() { if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") { // document.getElementById("txtHint").innerHTML=xmlHttp.responseText; hulp = xmlHttp.responseText; hulp = hulp.substring(0,1); //alert(hulp); if (hulp == '#') { //alert(hulp); document.getElementById("eenheid").innerHTML = ' '; } else { document.getElementById("eenheid").innerHTML = xmlHttp.responseText; } } } |
1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // clear down the dropdown before adding new entries into it. selectfield.options.length = 1; j=0; for (var i=0; i < data.length; i++) { if (data[i] == 'RETURN') { return true; } selectfield.options[j] = new Option(data[i], data[i]); j++; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <textarea id="mytextarea11">my test 1 2 3 </textarea> <textarea id="mytextarea12">my test2 4 5 6</textarea> <br> <input type="button" name="button" value="Submit" onclick="javascript:get(this.parentNode,1);"> </form> <br><br> Server-Response:<br> <hr> <span name="myspan1" id="myspan1">hoi?</span> |
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 | function makePOSTRequest(url, parameters, nr) { http_request = false; if (window.XMLHttpRequest) { // Mozilla, Safari,... http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { // set type accordingly to anticipated content type //http_request.overrideMimeType('text/xml'); http_request.overrideMimeType('text/html'); } } else if (window.ActiveXObject) { // IE try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } if (!http_request) { alert('Cannot create XMLHTTP instance'); return false; } http_request.onreadystatechange = alertContents; http_request.open('POST', url, true); http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); http_request.setRequestHeader("Content-length", parameters.length); http_request.setRequestHeader("Connection", "close"); http_request.send(parameters); } function alertContents() { if (http_request.readyState == 4) { if (http_request.status == 200) { //alert(http_request.responseText); result = http_request.responseText; document.getElementById("myspan1").innerHTML = result + "<input type="button" name="close" value="sluiten" onClick="sluit(1)">"; // alert("myspan"+nr+""); } else { alert('There was a problem with the request.'); } } if (http_request.readyState == 1) { document.getElementById("myspan1").innerHTML = "<img src='img.gif'>" } if (http_request.readyState == 2) { document.getElementById("myspan1").innerHTML = "<img src='img.gif'>" } if (http_request.readyState == 3) { document.getElementById("myspan1").innerHTML = "<img src='img.gif'>" } } function get(obj, nr) { var poststr = "mytextarea"+nr+"1=" + encodeURI( document.getElementById("mytextarea"+nr+"1").value ) + "&mytextarea"+nr+"2=" + encodeURI( document.getElementById("mytextarea"+nr+"2").value ); makePOSTRequest('update2.php', poststr, nr); } function sluit(nr) { document.getElementById("myspan"+nr).innerHTML = ""; } |
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 | function makePOSTRequest(url, parameters, nr) { http_request = false; if (window.XMLHttpRequest) { // Mozilla, Safari,... http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { // set type accordingly to anticipated content type //http_request.overrideMimeType('text/xml'); http_request.overrideMimeType('text/html'); } } else if (window.ActiveXObject) { // IE try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } if (!http_request) { alert('Cannot create XMLHTTP instance'); return false; } http_request.onreadystatechange = alertContents(nr); http_request.open('POST', url, true); http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); http_request.setRequestHeader("Content-length", parameters.length); http_request.setRequestHeader("Connection", "close"); http_request.send(parameters); } function alertContents(nr) { if (http_request.readyState == 4) { if (http_request.status == 200) { //alert(http_request.responseText); result = http_request.responseText; document.getElementById("myspan"+nr+"").innerHTML = result + "<input type="button" name="close" value="sluiten" onClick="sluit("+nr+")">"; // alert("myspan"+nr+""); } else { alert('There was a problem with the request.'); } } if (http_request.readyState == 1) { document.getElementById("myspan"+nr+"").innerHTML = "<img src='img.gif'>" } if (http_request.readyState == 2) { document.getElementById("myspan"+nr+"").innerHTML = "<img src='img.gif'>" } if (http_request.readyState == 3) { document.getElementById("myspan"+nr+"").innerHTML = "<img src='img.gif'>" } } function get(obj, nr) { var poststr = "mytextarea"+nr+"1=" + encodeURI( document.getElementById("mytextarea"+nr+"1").value ) + "&mytextarea"+nr+"2=" + encodeURI( document.getElementById("mytextarea"+nr+"2").value ); makePOSTRequest('update2.php', poststr, nr); } function sluit(nr) { document.getElementById("myspan"+nr).innerHTML = ""; } |
1 2 3 | alertContents(nr); } |
check! :)quote:Op zondag 1 april 2007 10:41 schreef SuperRembo het volgende:
onreadystatechange moet een functie zijn die uitgevoer kan worden als de readystate van de request veranderd. In de oude versie is het inderdaad een functie, in de nieuwe versie wordt de functie alertContents meteen uitgevoerd en het resultaat (null/undefinded) wordt aan onreadystatechange toegekend.
Extra parameters doorgeven kan met behulp van een closure:
[ code verwijderd ]
hoe bedoel je dat? Het is de bedoeling dat er meerdere 'forms' komen (zoals dit dus-->)quote:Als je toch alle gegevens via javascript wil ophalen en de form submit niet gebruikt, dan kan je beter de hele form tag weg laten.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <input id="mytextarea11" value="my test"> <input id="mytextarea12" value="my test"> <input type="button" name="button" value="Submit" onclick="javascript:get(this.parentNode,1);"> </form> <div id="myspan1"></div> meteen wat tekst? <form action="javascript:get(document.getElementById('myform'),2);" name="myform2" id="myform2"> <input id="mytextarea21" value="my test"> <input id="mytextarea22" value="my test"> <input type="button" name="button" value="Submit" onclick="javascript:get(this.parentNode,2);"> </form> <div id="myspan2"></div> meteen wat tekst? |
je bedoelt dmv style="display:none"?quote:In een onclick attribuut hoort javascript te staan, dus "javascript:" is daar overbodig.
Ik zou de sluit-knop gewoon in je html zetten. Standaard is ie verborgen, alleen als je 'm nodig hebt maak je 'm zichtbaar. Dat werkt een stuk makkelijker dan in javascript een hele button in innerHTML zetten. Hetzelfde geldt voor het 'busy' plaatje.
De action van het form doet hetzelfde als de onclick van de submit button. Ik vraag me af of die action überhaupt uitgevoerd wordt.quote:Op zondag 1 april 2007 15:13 schreef qu63 het volgende:
hoe bedoel je dat? Het is de bedoeling dat er meerdere 'forms' komen (zoals dit dus-->)
HTML
Ja.quote:je bedoelt dmv style="display:none"?
wordt idd niet uitgevoerd..quote:Op zondag 1 april 2007 15:59 schreef SuperRembo het volgende:
[..]
De action van het form doet hetzelfde als de onclick van de submit button. Ik vraag me af of die action überhaupt uitgevoerd wordt.
Maar is wel nodig voor de validatie van je document. Als dat je uberhaupt iets uitmaakt.quote:
Jup.quote:Op dinsdag 10 april 2007 14:36 schreef Geqxon het volgende:
Op wat voor manier moet er ingelogd worden? Een username / password veld op een pagina oid?
1 |
1 |
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 | // functie 1 function getpageBody(name) { http.open("GET", urlpageBody + escape(name), true); http.onreadystatechange = function() { if (http.readyState == 4) { results = http.responseText; if(results!=''){ document.getElementById('PageVersion').innerHTML=getVersions(name); // dit gaat dus blijkbaar fout }else{ document.getElementById('PageVersion').innerHTML=' '; } } } http.send(null); } //functie 2 function getVersions(page) { http.open("GET", urlgetVersions + escape(page), true); http.onreadystatechange = function() { if (http.readyState == 4) { results = http.responseText; if(results!=''){ return http.responseText; }else{ return('leeg'); } } } http.send(null); } ?> |
Volgens mij begrijp jij het concept van AJAX niet helemaal. De eerste A staat namelijk voor asynchronous. Dit houdt in dat je functie niet gaat zitten wachten op input van de webserver. De hele onreadystate functie wordt pas aangeroepen op het moment dat de webserver iets terugstuurt. Je functie retourneert dus inderdaad nooit iets.quote:Op vrijdag 20 april 2007 11:20 schreef George.W.Bush het volgende:
Ik heb een javascript functie welke een andere functie aanroept.
functie 2 haalt via AJAX een aantal waarden op en zou die moeten returnen naar functie 1.
functie 1 moet vervolgens die values in een innerHMTL zetten:
[ code verwijderd ]
Zodra ik deze functies aanroep/ activeer, geeft mijn element PageVersions 'undefined' te zien.
Als ik in functie 2 de return verander in een document.write laat deze wel degelijk de te verwachten output zien. Maar deze output komt op de een of andere manier niet correct in functie 1 terecht.
Wat doe ik fout?
eh nee, die functie retourneert wel degelijk wat. De volgende regel:quote:Op vrijdag 20 april 2007 11:27 schreef cyberstalker het volgende:
[..]
Volgens mij begrijp jij het concept van AJAX niet helemaal. De eerste A staat namelijk voor asynchronous. Dit houdt in dat je functie niet gaat zitten wachten op input van de webserver. De hele onreadystate functie wordt pas aangeroepen op het moment dat de webserver iets terugstuurt. Je functie retourneert dus inderdaad nooit iets.
Je zult dus vanuit die functie zelf wat dingen moeten veranderen.
1 |
1 |
1 2 3 4 5 6 7 | <select onChange="getpageVersion(this.options[this.selectedIndex].value)"> <option selected="selected">Huidige versie</option> <option value="6">-1</option> <option value="2">-2</option> <option value="1">-3</option> </select> |
Je snapt het nog steeds niet. Het stuk vanaf de http.onreadystatechange = function() { tot en met de bijbehorende } wordt niet uitgevoerd totdat er een resultaat is. Dit is dus wat er direct wordt uitgevoerd:quote:Op vrijdag 20 april 2007 11:36 schreef George.W.Bush het volgende:
[..]
eh nee, die functie retourneert wel degelijk wat. De volgende regel:
[ code verwijderd ]
is wat helderder als je deze erbij hebt
[ code verwijderd ]
Nogmaals, als ik in functie 2 document.write('http.responseText'); schrijf ipv return http.responseText; krijg ik gewoon keurig datgene van de webserver te zien wat ik nodig heb.
1 2 3 4 5 | { http.open("GET", urlgetVersions + escape(page), true); http.send(null); } |
quote:Op vrijdag 20 april 2007 11:44 schreef cyberstalker het volgende:
[..]
Je snapt het nog steeds niet. Het stuk vanaf de http.onreadystatechange = function() { tot en met de bijbehorende } wordt niet uitgevoerd totdat er een resultaat is. Dit is dus wat er direct wordt uitgevoerd:
[ code verwijderd ]
En natuurlijk werkt een document.write daar. Die wordt dan uitgevoerd op het moment dat er een resultaat is. Op dat moment is jouw functie getVersions al gestopt zonder een returnvalue.
Klopt inderdaad. Verschil is alleen dat op het moment van die onreadystatechange de functie getVersions allang gestopt is. Die gaat daar niet op zitten wachten. Dat is het hele idee van dat asynchronous. Jij denkt in lineaire code en daar ga je de mist in.quote:Op vrijdag 20 april 2007 11:48 schreef George.W.Bush het volgende:
[..]
Die document.write wordt toch op hetzelfde moment uitgevoerd als die return. Die return vind pas plaats bij de onreadstate
Je bedoelt dat functie een al gestopt is?quote:Op vrijdag 20 april 2007 11:51 schreef cyberstalker het volgende:
[..]
Klopt inderdaad. Verschil is alleen dat op het moment van die onreadystatechange de functie getVersions allang gestopt is. Die gaat daar niet op zitten wachten. Dat is het hele idee van dat asynchronous. Jij denkt in lineaire code en daar ga je de mist in.
1 |
1 2 | setTimeout("document.getElementById('PageVersion').innerHTML="+version+"",1000); |
Je begrijpt het zo te zien nog steeds niet. Omdat ik niet het idee heb dat ik het je zo uit kan leggen dat je het zelf begrijpt heb ik hier een voorbeeldje dat zou moeten werken (niet getest):quote:Op vrijdag 20 april 2007 12:44 schreef George.W.Bush het volgende:
fuck, ook met een timertje ingebouwd werkt het niet.
[ code verwijderd ]
iemand nog een idee hoe ik functie 1 kan laten wachten op de results van functie 2?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | { http.open("GET", urlpageBody + escape(name), true); http.onreadystatechange = function() { if (http.readyState == 4) { results = http.responseText; if(results!='') { document.getElementById('PageVersion').innerHTML=results; } else { document.getElementById('PageVersion').innerHTML=' '; } } } http.send(null); } |
Zie de post boven je, ik heb iets soortgelijks gedaan. Ik begreep je wel, maar wist even niet hoe het op te lossen. Door inderdaad beide functie's in 1 functie te integreren is het probleem opgelost.quote:Op vrijdag 20 april 2007 13:29 schreef cyberstalker het volgende:
[..]
Je begrijpt het zo te zien nog steeds niet. Omdat ik niet het idee heb dat ik het je zo uit kan leggen dat je het zelf begrijpt heb ik hier een voorbeeldje dat zou moeten werken (niet getest):
[ code verwijderd ]
Dat valt wel mee volgens mij. http request 1 trekt de inhoud van een gekozen pagina uit de pagina tabel en plaatst die in mijn fckeditor (getPageBody). In deze funtie heb ik nu getVersions geintegreerd die via een xmlhttprequest een andere query uitvoert die uit de versie tabel het aantal versies van de gekozen pagina haalt en deze toont.quote:Sowieso is het vreemd dat je in zowel functie 1 als functie 2 een http request doet.
Maar waarom haal je niet in 1 request de pagina EN de bijbehorende versieinformatie tegelijk op?quote:Op vrijdag 20 april 2007 14:07 schreef George.W.Bush het volgende:
Dat valt wel mee volgens mij. http request 1 trekt de inhoud van een gekozen pagina uit de pagina tabel en plaatst die in mijn fckeditor (getPageBody). In deze funtie heb ik nu getVersions geintegreerd die via een xmlhttprequest een andere query uitvoert die uit de versie tabel het aantal versies van de gekozen pagina haalt en deze toont.
Ik bedacht me later dat dat zou kunnen, maar ik zie niet zo zeer de toegevoegde waarde van een join in mijn query tov 2 xmlhttprequest om de code aan te passen, of zie ik wat over het hoofd?quote:Op vrijdag 20 april 2007 17:12 schreef SuperRembo het volgende:
[..]
Maar waarom haal je niet in 1 request de pagina EN de bijbehorende versieinformatie tegelijk op?
Dat bedoelde ik dus. Is 1 'moeilijkere' query sneller dan twee html requests met 2 maal een simpele select?quote:Op vrijdag 20 april 2007 19:26 schreef SuperRembo het volgende:
Ik zeg niet dat je een join in je query moet stoppen, ik zeg alleen dat je waarschijnlijk beter die resultaten in 1 httprequest kunt versturen. Dat is sneller, belast de server minder en is makkelijker in javascript.
Het is natuurlijk niet zo dat er een 1-op-1 relatie is in het aantal requests en het aantal queries: je kunt met 1 httprequest prima zorgen dat je server side 2 queries uitvoert.quote:Op zondag 22 april 2007 20:17 schreef George.W.Bush het volgende:
[..]
Dat bedoelde ik dus. Is 1 'moeilijkere' query sneller dan twee html requests met 2 maal een simpele select?
Die javascript heb ik nu al, hoewel dit voor toekomstige aanpassingen inderdaad vragen om problemen is
Uiteraard de serverside kant kan natuurlijk van alles uitvoeren, het ging me nu om deze specifieke situatie.quote:Op zondag 22 april 2007 20:24 schreef CraZaay het volgende:
[..]
Het is natuurlijk niet zo dat er een 1-op-1 relatie is in het aantal requests en het aantal queries: je kunt met 1 httprequest prima zorgen dat je server side 2 queries uitvoert.
Waarom kun je in deze specifieke situatie dan niet met 1 httprequest zowel de inhoud van de pagina als de beschikbare versies ophalen? Of zie ik iets over het hoofd?quote:Op zondag 22 april 2007 20:46 schreef George.W.Bush het volgende:
[..]
Uiteraard de serverside kant kan natuurlijk van alles uitvoeren, het ging me nu om deze specifieke situatie.
Dat kan ookquote:Op zondag 22 april 2007 23:31 schreef CraZaay het volgende:
[..]
Waarom kun je in deze specifieke situatie dan niet met 1 httprequest zowel de inhoud van de pagina als de beschikbare versies ophalen? Of zie ik iets over het hoofd?
1 |
1 2 3 4 5 | var reponseData = eval(request.responseText); document.getElementById('PageBody').innerHTML = reponseData.body; document.getElementById('PageVersion').innerHTML = reponseData.version; } |
Hee, interessant! Ik ga dat JSon verder door lezen, ik neem aan dat ik er wat scripts voor op de server moet zetten?quote:Op maandag 23 april 2007 00:25 schreef SuperRembo het volgende:
Nogmaals, je hoeft geen join in je query te stoppen. Je kunt nog steeds die 2 simpele query's uitvoeren. De meeste snelheidswinst haal je doordat je browser niet 2x verbinding met de server hoeft te maken. (En als het een beveiligde pagina is waarvoor je ingelogd moet zijn hoef je maar 1x de sessie te controleren.)
Het is so wie so handig om te weten hoe je meerdere gegevens tegelijk te sturen. De X van ajax staat voor XML; je zou dus XML kunnen gebruiken, maar het werken met XML in javascript (en in PHP) is omslachtig. JSON (zie http://json.org) werkt veel makkelijker. Je stuurt met php bijvoorbeeld
[ code verwijderd ]
In javascript doe je weer een eval() van die tekst:
[ code verwijderd ]
Makkelijk uit te breiden, duidelijk leesbaar en snel![]()
Dus geen 'extra' scripts en dergelijke nodig, Out of the box?quote:JSON is a subset of the object literal notation of JavaScript. Since JSON is a subset of JavaScript, it can be used in the language with no muss or fuss.
PHP heeft vanaf versie 5.2 json_encode() en json_decode(). Om json in javascript te decoden kun je eval() gebruiken. De andere kant op gaat iets minder eenvoudig, maar daar zijn makkelijk scripts voor te vinden (bijv. op json.org). Json encoden in javascript heb je eigenlijk niet zo vaak nodig, alleen als je vanuit js (veel) gegevens terug wil posten naar de server.quote:Op maandag 23 april 2007 08:28 schreef George.W.Bush het volgende:
Dus geen 'extra' scripts en dergelijke nodig, Out of the box?
Maar als ik zoals jij hierboven op die manier echo'ed dan kan ik het ook dmv van var reponseData = eval(request.responseText); 'opdelen'? Daarvoor hoef ik geen extra scripts te installeren?quote:Op maandag 23 april 2007 08:40 schreef SuperRembo het volgende:
[..]
PHP heeft vanaf versie 5.2 json_encode() en json_decode(). Om json in javascript te decoden kun je eval() gebruiken.
Dat is inderdaad voor mij op dit moment niet van toepassing. Ik stuur een GET request naar de serverquote:De andere kant op gaat iets minder eenvoudig, maar daar zijn makkelijk scripts voor te vinden (bijv. op json.org). Json encoden in javascript heb je eigenlijk niet zo vaak nodig, alleen als je vanuit js (veel) gegevens terug wil posten naar de server.
Gegeven het feit dat Java niets te maken heeft met Javascript, zou deze opmerking niet meer waarheid kunnen bevatten als je je best zou doenquote:Op maandag 23 april 2007 09:17 schreef geertp het volgende:
Bij de beveiligingsinstellingen staat alles wat met Java te maken heeft ingeschakeld, dus daar zou het hem niet in moeten zitten.
Ik denk dat hij ook even goed moet kijken naar wat hij precies wel en niet aangevinkt heeftquote:Op maandag 23 april 2007 10:23 schreef Litpho het volgende:
[..]
Gegeven het feit dat Java niets te maken heeft met Javascript, zou deze opmerking niet meer waarheid kunnen bevatten als je je best zou doen.
Wat SuperRembo hierboven al zegt: wat let je om twee simpele queries uit te voeren als reactie op 1 request?quote:Op zondag 22 april 2007 23:55 schreef George.W.Bush het volgende:
[..]
Dat kan ookIk stel alleen een tegenvraag... maak het zoveel uit of ik 2 httprequest uitvoer ipv een moeilijke(re) query?
Daarnaast kun je het (bijvoorbeeld voor oudere PHP-versies) ook gewoon als string doen zoals in SuperRembo's voorbeeld.quote:Op maandag 23 april 2007 08:40 schreef SuperRembo het volgende:
[..]
PHP heeft vanaf versie 5.2 json_encode() en json_decode().
1 |
Nee. Die zorgen ervoor dat het een object is. Een object met waardes die je op naam kunt uitlezen.quote:Op maandag 23 april 2007 21:48 schreef SuperRembo het volgende:
Goeie vraag! Alleen weet ik niet of ik zelf wel helemaal begrijp.
De haakjes (de group operator) zorgen er in ieder geval voor dat wat er tussen staat als 1 statement wordt geëvalueerd (zoadat {..} een object wordt) en niet als serie statements (zodat {...} net als een functie-body uitgevoerd wordt).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | var foo = {name: 'Bar', value: 'baz'}; // 1.b var foo; eval("foo = {name: 'Bar', value: 'baz'}"); // 1.c var foo = eval("({name: 'Bar', value: 'baz'})"); // 2.a var foo = ['Bar', 'baz']; // 2.b var foo; eval("foo = ['Bar', 'baz']"); // 2.c var foo = eval("['Bar', 'baz']"); |
Dat is omdat de [ ] voor een array staat en { } voor een object. Een gewone array kun je niet als associatieve array gebruiken, een object wel.quote:Op maandag 23 april 2007 22:31 schreef SuperRembo het volgende:
Nee. Het object is dat stuk tussen van { tot }.
[ code verwijderd ]
De vraag is waarom je bij 1.c wel een setje () nodig hebt, en bij het analoge geval 2.c bij een array niet.
Ja duh! [] staat voor array en {} voor object.quote:Op maandag 23 april 2007 22:58 schreef cyberstalker het volgende:
[..]
Dat is omdat de [ ] voor een array staat en { } voor een object. Een gewone array kun je niet als associatieve array gebruiken, een object wel.
Escapen?quote:Op maandag 23 april 2007 16:28 schreef George.W.Bush het volgende:
Hij gaat alleen over z'n nek van een enkele quote in mijn body tekst.
Ja ik trek de data serverside door htmlentities en rawurlencode, anders gaat het clientside script over z'n nek. En vervolgens decode ik clientside met unescape(responseData.body);quote:
Ik heb het met 'addslashes' geprobeerd, maar dan kreeg ik ook een foutmelding.quote:Op dinsdag 24 april 2007 12:37 schreef SuperRembo het volgende:
Belangrijke regel bij escapen/encoden: alleen doen als het nodig is, en gebruik het juiste type!
Dus als je (in php) een tekst in een js-string wil zetten, dan moet je de qoutes escapen met een backslash. Html-encoden is nergens voor nodig (het gaat namelijk niet om html).
Maar het gaat erom dat het in php encode wordt en dat ik het in javascipt moet decoden.quote:Escape() en unescape() in javascript kan je beter niet gebruiken. Wat escape() doet lijkt op urlencode() in php, maar het is net even anders. Je kunt beter encodeURIComponent() gebruiken om parameters voor een url te encoden. (encodeURIComponent bestaat alleen niet in IE5.0, maar da's toch een ouwe k***browser)
Addslashes zou voldoende moeten zijn. De rest (HTML-code) kan prima in een JS string afaik.quote:Op dinsdag 24 april 2007 15:34 schreef George.W.Bush het volgende:
Maar het gaat erom dat het in php encode wordt en dat ik het in javascipt moet decoden.
Dat was dus niet voldoende, gaf een foutmelding.quote:Op dinsdag 24 april 2007 23:48 schreef CraZaay het volgende:
[..]
Addslashes zou voldoende moeten zijn.
Onzin. Al eens van enters gehoord?quote:Op dinsdag 24 april 2007 23:48 schreef CraZaay het volgende:
[..]
Addslashes zou voldoende moeten zijn. De rest (HTML-code) kan prima in een JS string afaik.
Ik ga er vanuit dat zelfs iemand die minime JS kennis heeft dit weet. Dat heeft ook niets met de HTML entities te maken.quote:Op woensdag 25 april 2007 08:45 schreef cyberstalker het volgende:
[..]
Onzin. Al eens van enters gehoord?
En welke is dat dan precies?quote:Op woensdag 25 april 2007 08:18 schreef George.W.Bush het volgende:
[..]
Dat was dus niet voldoende, gaf een foutmelding.
quote:
1 2 3 4 5 | Bronbestand: http://intranet/includes/functions.js Regel: 11, Kolom: 7 Broncode: ({body:'<h2><font face=\"Verdana\">Welkom op Test\'s Intranet</font></h2> |
1 2 3 4 5 | http.open("GET", urlpageBody + escape(name), true); http.onreadystatechange = function() { if (http.readyState == 4) { var responseData = eval("("+http.responseText+")"); // hier dus |
Uiteraard zitten er linebreaks in die string, het is de body van een paginaquote:Op woensdag 25 april 2007 23:26 schreef CraZaay het volgende:
Er zitten geen line breaks in die string en hij wordt ook afgesloten met een enkele quote?
Die dubbele quotes hoef je trouwens niet te escapen.
Uiteraard?quote:Op donderdag 26 april 2007 11:28 schreef George.W.Bush het volgende:
[..]
Uiteraard zitten er linebreaks in die string, het is de body van een pagina.
Er valt weinig aan WYSIWYG editors als FCKeditor te doen die linebreaks uitspugen.quote:Op donderdag 26 april 2007 12:50 schreef CraZaay het volgende:
[..]
Uiteraard?
Linebreaks zijn geen onderdeel van de HTML ofzo. Dat jij ze er voor de leesbaarheid tussen zet is prima, maar JS gaat er wel van over z'n nek
quote:Op donderdag 26 april 2007 15:06 schreef Darkomen het volgende:
Doen dan! php? nl2br ;-)
Je wilt natuurlijk geen extra 's :-)
1 2 3 4 5 6 7 | // linebreaks weghalen $string = str_replace(array("\n","\r"),'',$string); // slashes escapen $string = str_replace("'","\'",$string); ?> |
Dit principe zeg maar:quote:Op vrijdag 27 april 2007 20:11 schreef SlimShady het volgende:
dat laatste moet lukken.
maar wat bedoel je met 'plaatje'? en de bedoeling?
1 |
Waar staat je site precies?quote:Op vrijdag 27 april 2007 20:30 schreef RayMania het volgende:
[..]
Dit principe zeg maar:
[ code verwijderd ]
Als je op het plaatje "/test.gif" klikt op de site, voegt het toe in aan favorieten bij IE. Bij andere browsers is er "Voeg toe aan favorieten!" te lezen. Ik wil in alle tijden een plaatje omdat dat mooier in de layout past.
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 | <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>RayManiac</title> </head> <body> <script type="text/javascript"> /*********************************************** * Bookmark site script- © Dynamic Drive DHTML code library (www.dynamicdrive.com) * This notice MUST stay intact for legal use * Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code ***********************************************/ /* Modified to support Opera */ function bookmarksite(title,url){ if (window.sidebar) // firefox window.sidebar.addPanel(title, url, ""); else if(window.opera && window.print){ // opera var elem = document.createElement('a'); elem.setAttribute('href',url); elem.setAttribute('title',title); elem.setAttribute('rel','sidebar'); elem.click(); } else if(document.all)// ie window.external.AddFavorite(url, title); } </script> <img src="./test.gif" alt="Voeg toe aan favorieten!" onclick="bookmarksite(window.document.title,window.location.href)" /> </body> </html> |
Zet dan aub wel tekst in de html en laat dat weg en een plaatje zien dmv CSS. En geen pseudo-code maar in de onclick. Is het allemaal accessible en unobtrusivequote:Op vrijdag 27 april 2007 20:30 schreef RayMania het volgende:
[..]
Dit principe zeg maar:
[ code verwijderd ]
Als je op het plaatje "/test.gif" klikt op de site, voegt het toe in aan favorieten bij IE. Bij andere browsers is er "Voeg toe aan favorieten!" te lezen. Ik wil in alle tijden een plaatje omdat dat mooier in de layout past.
1 |
Ohja, ik zie hetquote:Op maandag 30 april 2007 12:14 schreef SuperRembo het volgende:
Als je favicon.ico in je wwwroot staat dan hoef je die regel niet toe te voegen.
Schuifbalken weglaten kan met CSS: body {overflow:hidden}
(beide geen javascript vragen)
1 2 | str = str.replace(" ", "+"); |
1 2 | str = str.replace(/ /g, "+"); |
1 |
Omdat het al laat is en je loopt te prutsen?quote:Op woensdag 2 mei 2007 00:50 schreef guitarist.nl het volgende:
[ code verwijderd ]
Waarom werkt dit wel in FF en niet in IE
ie gebruikt em dan ook waar hij voor bedoelt is , favorite iconquote:Op maandag 30 april 2007 12:17 schreef RayMania het volgende:
[..]
Ohja, ik zie het. Alleen in FireFox zie ik hem op elke pagina, niet met IE helaas.
En schuifbalken heb ik al gevonden.
Noscript tags kun je ook met CSS stylenquote:Op donderdag 3 mei 2007 23:26 schreef mschol het volgende:
[..]
ie gebruikt em dan ook waar hij voor bedoelt is , favorite icon
http://en.wikipedia.org/wiki/Favicon
anyway vraagje:
ik heb op mijn site een Javascript navigatie menu echter als JS uitstaat heb je er natuurlijk geen hol aan...
hoe kan ik op een makkelijke, en nette, manier een melding geven dat Javascript aan moet staan.
de pagina wordt met een home made template parser geparsed, dus dat zou ik dan ergens moeten onderbreken ofzo....
nu krijg ik linksboven in de melding die tussen <noscript></noscript> staat, dwars door me layout heen
http://home.mschol.eu/quote:Op vrijdag 4 mei 2007 09:32 schreef CraZaay het volgende:
Ergens die melding neerzetten en vervolgens hiden met JS (wa dus alleen werkt als de bezoeker daadwerkelijk JS draait) is over het algemeen redelijk afdoende
Overigens ben ik erg benieuwd hoe je menu eruit ziet, want de meeste JS menu's kun je prima toegankelijk maken voor mensen zonder JS.
Dat zou ideaal zijn, is zoiets denk je mogelijk?quote:Op vrijdag 4 mei 2007 13:49 schreef SlimShady het volgende:
nee. oh, ik dacht dat je mbv CSS de checkboxes had vervangen door afbeeldingen.
Is ook een goeie! Ik zat er net ook aan te denken om de alt-teg van de afbeelding hier voor te misbruiken, met een "True" of "False" waardequote:Op vrijdag 4 mei 2007 13:55 schreef Darkomen het volgende:
je zou die values wanneer er geklikt word op die afbeelding in een hidden text field kunnen toevoegen?
zeker. ik zal 'ns kijken...quote:Op vrijdag 4 mei 2007 15:25 schreef Geqxon het volgende:
[..]
Dat zou ideaal zijn, is zoiets denk je mogelijk?
[..]
Het is wel mogelijk met enkel CSS. Voor IE is dan wel een extra scriptje nodig omdat IE zoals gewoonlijk weer bagger is en de :checked pseudo-class niet ondersteunt. Dit kan waarschijnlijk wel met een unobtrusive scriptje maar daar weet ik het fijne niet van omdat ik nooit met IE werk.quote:Op vrijdag 4 mei 2007 16:17 schreef SlimShady het volgende:
alleen css is dus niet voldoende. javascript is nodig.
er zijn demo's:
http://www.flog.co.nz/lab/ARC/ARC.htm
http://www.hellgatelondon.com/demons/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | { display: none; } form input[type="checkbox"] + label[for] { display: block; width: 20px; height: 20px; opacity: 0.7; } form input[type="checkbox"]:checked + label[for] { opacity: 1; } form input[type="checkbox"] + label[for="waarde1"] { background-image: url('images/value1_notchecked.png'); } |
1 2 3 4 5 6 7 8 | <fieldset> <legend>Formulier met plaatjes als checkboxjes</legend> <input type="checkbox" id="value1" name="value1"> <label for="value1"></label> </fieldset> </form> |
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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | function whois(tld, domein) { xmlHttp=GetXmlHttpObject(); if (xmlHttp==null) { alert ("Geen ajax ondersteuning.. BOOOOH!"); return; } tekenTabel(domein); xmlHttp.onreadystatechange=function() { if(xmlHttp.readyState==1 || xmlHttp.readyState==2 || xmlHttp.readyState==3) { document.getElementById(tld).innerHTML="Checking"; } if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") { document.getElementById(tld).innerHTML=xmlHttp.responseText; } } xmlHttp.open("GET","test.php"+"?domein="+domein+"&tld="+tld,true); xmlHttp.setRequestHeader("Cache-Control", "no-cache"); xmlHttp.send(null); } function start(domein) { tekenTabel(domein); for(x in array) { whois(array[x], domein); } } function GetXmlHttpObject() { var xmlHttp=null; try { // Firefox, Opera 8.0+, Safari xmlHttp=new XMLHttpRequest(); } catch (e) { // Internet Explorer try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } } return xmlHttp; } function tekenTabel(domein) { var tabe = ""; tabel='<table width="350" border="0" cellspacing="2" cellpadding="0">'; tabel+='<tr>'; tabel+='<td width="100" class="tdHeader">Tld</td>'; tabel+='<td width="100" class="tdHeader">Beschikbaar</td>'; tabel+='</tr>'; for(x in array) { tabel+='<tr>'; tabel+='<td align="center" valign="top" >'+array[x]+'</td>'; tabel+='<td align="center" valign="top" ><div id="'+array[x]+'"></div></td>'; tabel+='</tr>'; } tabel+='</table>'; document.getElementById("result").innerHTML = tabel; } |
1 2 3 4 5 6 | <input name="txtDomein" id="txtDomein" type="text"> <input name="btnSubmit" type="button" value="whois" onclick="start(document.frmTest.txtDomein.value);"></form> <br> <br> <div id="result"></div> |
1 2 3 4 | <input name="searchFor" type="text" size="10"> <a href="javascript:void(0);" onClick="javascript:search_form_basic.submit();">search</a> </form> |
1 2 3 4 5 6 7 8 9 10 | function runSearch(){ var query = document.getElementById('query').value; query = query.replace(" ","_"); window.location = "http://www.google.nl/" + query + ".html"; } </script> <input type="text" id="query"> <input type="button" onclick="runSearch()"> |
geeft niet, et werktquote:Op zaterdag 5 mei 2007 23:00 schreef Geqxon het volgende:
[ code verwijderd ]
Al ben ik te lui het te runnen
Misschien is het eenvoudiger om hier met een simpele mod_rewrite te werken. Werkt stukken eenvoudiger hierquote:Op zaterdag 5 mei 2007 23:06 schreef mschol het volgende:
[..]
geeft niet, et werkt![]()
--edit--
het grootste gedeelte dan..
als ik }$%$# als string invoer kom ik uit op http://home.mschol.eu/search/ terwijl de javascript alert mij wel de juiste url terug geeft (http://home.mschol.eu/search/}$%$#.html )
even kijken met FF
hmm runsearch is not defined... -> die is opgelost maar nog steeds als je zo'n vreemde url doet, stopt ie...
nou ja jammer, voor latere zorg, bouw wel een extra check in me search..
Is bekend en niet gevaarlijk. Het sessieid wat je ziet is niet eentje waarme je iets kuntquote:Op zondag 6 mei 2007 00:21 schreef GBCHEATER het volgende:
:edit:
Hmz, bug in Replique? Ik krijg elke keer wanneer ik mijn code edit een hidden field bij mijn formulier, met daarin mijn sessieid?
Kreeg hetzelfde antwoord in de bug afdelingquote:Op zondag 6 mei 2007 00:36 schreef cyberstalker het volgende:
[..]
Is bekend en niet gevaarlijk. Het sessieid wat je ziet is niet eentje waarme je iets kunt.
Dat heeft iig mijn layout probleem opgelostquote:Op zondag 6 mei 2007 00:58 schreef Geqxon het volgende:
Ik kan je niet helpen, maar ik raad je aan om je HTML output eerst in een variabele te stoppen, en als je daar mee klaar bent iets in de trant van "innerhtml = output" te doen.
Daarmee wordt gelijk je huidige inhoud overschreden, en je sourcecode is wat netter.
1 |
Daar maak ik me ook zorgen over, kan het uberhaupt wel zoals ik het nu heb gedaan? Wanneer ik zes tld's neem, word alleen de laatste vervangen. Dus ik ben inderdaad bang dat dat het is. Maar hoe zou je dat kunnen oplossen behalve voor elke tld een aparte functie schrijven?quote:Op zondag 6 mei 2007 14:37 schreef SuperRembo het volgende:
GBCHEATER, lopen je httprequests niet door elkaar? Ik bedoel dat bijvoorbeeld het resultaat van de .com check bij het .net resultaat komt te staan. Om dat te controleren zou je wat extra debug info moeten schrijven (in js en php).
Dat heb ik nu dus gedaan:quote:Op zondag 6 mei 2007 14:47 schreef SlimShady het volgende:
nee, één functie die je x keer aanroept.
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 | { xmlHttp=GetXmlHttpObject(); if (xmlHttp==null) { alert ("Geen ajax ondersteuning.. BOOOOH!"); return; } xmlHttp.onreadystatechange=function() { if(xmlHttp.readyState==1 || xmlHttp.readyState==2 || xmlHttp.readyState==3) { alert(tld+' controle'); document.getElementById(tld).innerHTML="<blink>Checking</blink>"; } if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") { alert(tld+' is '+xmlHttp.responseText); if(xmlHttp.responseText == "Bezet" || xmlHttp.responseText == "Onbekend") { document.getElementById("bekijk"+tld).innerHTML = '<a href="http://www.'+domein+'.'+tld+'" target="_blank"><img src="images/bekijk_active.png" alt="Bekijk de pagina van de geregistreerde domein" border="0"></a>'; } if(xmlHttp.responseText == "Bezet") { document.getElementById("informatie"+tld).innerHTML = '<a href="javascript: getInfo('+domein+','+tld+');"><img src="images/info_active.png" alt="Meer informatie" border="0"></a>'; } document.getElementById(tld).innerHTML=xmlHttp.responseText; } } xmlHttp.open("GET","test.php"+"?domein="+domein+"&tld="+tld,true); xmlHttp.setRequestHeader("Cache-Control", "no-cache"); xmlHttp.send(null); } |
Een alert is in een geval als dit niet handig, want het gaat juist om de volgorde waarin dingen (bijna tegelijk) gebeuren. Je kan beter wat loggen in bijvoorbeeld een textarea. (Daar heb ik ooit een scriptje voor gemaakt.)quote:Op zondag 6 mei 2007 14:46 schreef GBCHEATER het volgende:
[..]
Daar maak ik me ook zorgen over, kan het uberhaupt wel zoals ik het nu heb gedaan? Wanneer ik zes tld's neem, word alleen de laatste vervangen. Dus ik ben inderdaad bang dat dat het is. Maar hoe zou je dat kunnen oplossen behalve voor elke tld een aparte functie schrijven?
:edit:
Als ik een alert plaats in xm.Http.readyState 1 t/m3 krijg ik 5 keer voor elke tld een alert. Plaats ik er een in xmlHttp.readystate 4 krijg ik hem alleen voor de laatste.
Mag ik je even bedanken :Xquote:Op zondag 6 mei 2007 16:18 schreef SuperRembo het volgende:
[..]
Een alert is in een geval als dit niet handig, want het gaat juist om de volgorde waarin dingen (bijna tegelijk) gebeuren. Je kan beter wat loggen in bijvoorbeeld een textarea. (Daar heb ik ooit een scriptje voor gemaakt.)
Volgens mij mist er een "var" bij xmlHttp in whois(), ik weet niet of dat echt de oplossing is.
1 |
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 | { var aantalParameters = aantal; var parameters = ''; aantalParameters++; parameters += '<div id="parameterDiv"'+aantalParameters+'>'; parameters += '<tr>'; parameters += '<td align="center">'; parameters += '<table width="450" border="0" cellspacing="0" cellpadding="0">'; parameters += '<tr>'; parameters += '<td class="subHeader"> '; parameters += '</td>'; parameters += '<td class="subHeader">'; parameters += '<div id="parameterTitel'+aantalParameters+'"></div>'; parameters += '</td>'; parameters += '</tr>'; parameters += '<tr>'; parameters += '<td width="100">Type:</td>'; parameters += '<td><input name="txtParamaterType'+aantalParameters+'" id="txtParamaterType'+aantalParameters+'" type="text" class="txt" size="51" onkeyup="modifyParameterTitle('+aantalParameters+')"/></td>'; parameters += '</tr>'; parameters += '<tr>'; parameters += '<td>Naam:</td>'; parameters += '<td><input name="txtParameterNaam'+aantalParameters+'" id="txtParameterNaam'+aantalParameters+'" type="text" class="txt" size="51" onkeyup="modifyParameterTitle('+aantalParameters+')"/></td>'; parameters += '</tr>'; parameters += '<tr>'; parameters += '<td valign="top">Omschrijving:</td>'; parameters += '<td><textarea name="txtParameterOmschrijving'+aantalParameters+'" id="txtParameterOmschrijving'+aantalParameters+'" cols="38" rows="5" class="txt"></textarea></td>'; parameters += '</tr>'; parameters += '</table>'; parameters += '</td>'; parameters += '</tr> '; parameters += '</div>'; document.getElementById("divFunctionParameter").innerHTML += parameters; document.getElementById("divVoegParameterToe").innerHTML = '<a href="javascript: addParameter('+aantalParameters+');">Voeg Toe</a>'; } |
1 2 3 4 5 6 | function start() { document.getElementById("divVoegParameterToe").innerHTML = '<a href="javascript: addParameter(0);">Voeg Toe</a>'; } |
De oplossing was bij een "bijplaatsing" eerst de bestaande parameters opvragen, en daarna de inhoud van de div te overschrijven (ja vies, maar werkt wel):quote:Op zaterdag 12 mei 2007 21:00 schreef super-muffin het volgende:
Je kan ook de oplossing posten :)
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 64 65 66 67 68 69 70 71 72 73 74 | function addParameter() { var parameters = ''; //totaal ophogen totaal++; if(totaal != 1) { //oude parameters ophalen for(var x = 1; x < totaal; x++) { parameters += '<div id="parameterDiv'+x+'">'; parameters += '<tr>'; parameters += '<td align="center">'; parameters += '<table width="450" border="0" cellspacing="0" cellpadding="0">'; parameters += '<tr>'; parameters += '<td class="subHeader"> '; parameters += '</td>'; parameters += '<td class="subHeader">'; parameters += '<div id="parameterTitel'+x+'">'+document.getElementById("parameterTitel"+x).innerHTML+'</div>'; parameters += '</td>'; parameters += '</tr>'; parameters += '<tr>'; parameters += '<td width="100">Type:</td>'; parameters += '<td><input name="txtParamaterType'+x+'" id="txtParamaterType'+x+'" type="text" class="txt" size="51" onkeyup="modifyParameterTitle('+x+')" value="'+document.getElementById("txtParamaterType"+x).value+'"/></td>'; parameters += '</tr>'; parameters += '<tr>'; parameters += '<td>Naam:</td>'; parameters += '<td><input name="txtParameterNaam'+x+'" id="txtParameterNaam'+x+'" type="text" class="txt" size="51" onkeyup="modifyParameterTitle('+x+')" value="'+document.getElementById("txtParameterNaam"+x).value+'"/></td>'; parameters += '</tr>'; parameters += '<tr>'; parameters += '<td valign="top">Omschrijving:</td>'; parameters += '<td><textarea name="txtParameterOmschrijving'+x+'" id="txtParameterOmschrijving'+x+'" cols="38" rows="5" class="txt">'+document.getElementById("txtParameterOmschrijving"+x).value+'</textarea></td>'; parameters += '</tr>'; parameters += '</table>'; parameters += '</td>'; parameters += '</tr> '; parameters += '</div>'; } } // nieuwe parameter toevoegen parameters += '<div id="parameterDiv'+totaal+'">'; parameters += '<tr>'; parameters += '<td align="center">'; parameters += '<table width="450" border="0" cellspacing="0" cellpadding="0">'; parameters += '<tr>'; parameters += '<td class="subHeader"> '; parameters += '</td>'; parameters += '<td class="subHeader">'; parameters += '<div id="parameterTitel'+totaal+'"></div>'; parameters += '</td>'; parameters += '</tr>'; parameters += '<tr>'; parameters += '<td width="100">Type:</td>'; parameters += '<td><input name="txtParamaterType'+totaal+'" id="txtParamaterType'+totaal+'" type="text" class="txt" size="51" onkeyup="modifyParameterTitle('+totaal+')"/></td>'; parameters += '</tr>'; parameters += '<tr>'; parameters += '<td>Naam:</td>'; parameters += '<td><input name="txtParameterNaam'+totaal+'" id="txtParameterNaam'+totaal+'" type="text" class="txt" size="51" onkeyup="modifyParameterTitle('+totaal+')"/></td>'; parameters += '</tr>'; parameters += '<tr>'; parameters += '<td valign="top">Omschrijving:</td>'; parameters += '<td><textarea name="txtParameterOmschrijving'+totaal+'" id="txtParameterOmschrijving'+totaal+'" cols="38" rows="5" class="txt"></textarea></td>'; parameters += '</tr>'; parameters += '</table>'; parameters += '</td>'; parameters += '</tr> '; parameters += '</div>'; document.getElementById("divFunctionParameter").innerHTML = parameters; } |
Accoord, maar zit er nog een praktisch nut aan behalve dat het "mooier" is? Tot nu toe vind ik het alleen maar meer werk voor iets wat voor mij niets oplevert..quote:Op zondag 13 mei 2007 00:22 schreef Geqxon het volgende:
Ik gok dat CraZaay het mooier vind als je de tabel doormiddel van javascript opbouwt. Dat je "nodes" creeert
Neequote:Op zondag 13 mei 2007 00:27 schreef Geqxon het volgende:
Trouwens, ondersteunt Javascript geen multiline variabelen?
Nee, maar een statement mag uiteraard wel over meerdere regels lopen (het is geen VBquote:Op zondag 13 mei 2007 00:27 schreef Geqxon het volgende:
Trouwens, ondersteunt Javascript geen multiline variabelen?
1 2 | + 'baz'; |
Het maken van form elementen is wel erg irritant omdat je daar voor IE weer een uitzondering moet maken. In IE kan je namelijk niet achteraf het type van een input element veranderen. Daarom moet je daar zo'n halfbakken constuctie alsquote:Op zondag 13 mei 2007 00:49 schreef CraZaay het volgende:
[..]
En ja, het maken van nodes vind ik netter omdat je daarmee meer mogelijkheden hebt voor manipulatie achteraf. Al is dat voor jouw script niet noodzakelijk, ik maak er maar een gewoonte van :)
1 |
Maar dan ben je weer op het punt waar ik nu zit, oftewel gewoon complete html er tussen proppen.. toch?quote:Op zondag 13 mei 2007 13:25 schreef SuperRembo het volgende:
[..]
Het maken van form elementen is wel erg irritant omdat je daar voor IE weer een uitzondering moet maken. In IE kan je namelijk niet achteraf het type van een input element veranderen. Daarom moet je daar zo'n halfbakken constuctie als
[ code verwijderd ]
gebruiken om een radiobutton te maken.
Dit is net die ene uitzondering. Ik kan met niet herinneren wanneer ik voor het laatst een input-element heb toegevoegd aan de DOMquote:Op zondag 13 mei 2007 13:47 schreef GBCHEATER het volgende:
[..]
Maar dan ben je weer op het punt waar ik nu zit, oftewel gewoon complete html er tussen proppen.. toch?
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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | <!-- // variables var curWidth = 0; var curX = 0; var newX = 0; var minWidthL = 150; // min width of left div var minWidthR = 300; // min width of right div var mouseButtonPos = "up"; //Function 'setPos(...) gets the original div width. function setPos(e) { //For handling events in ie vs. w3c. curEvent = ((typeof event == "undefined")? e: event); //Sets mouse flag as down. mouseButtonPos = "down"; //Gets position of click. curX = curEvent.clientX; //Get the width of the div. var tempWidthL = document.getElementById("treeView").style.width; var tempWidthR = document.getElementById("treeList").style.width; //Get the width value. var widthArrayL = tempWidthL.split("p"); var widthArrayR = tempWidthR.split("p"); //Set the current width. curWidthL = parseInt(widthArrayL[0]); curWidthR = parseInt(widthArrayR[0]); } //Function getPos(...) changes the width of the div while the mouse button is pressed. function getPos(e){ if( mouseButtonPos == "down" ) { //For handling events in ie vs. w3c. curEvent = ((typeof event == "undefined")? e: event); //Get new mouse position. newX = curEvent.clientX; //Calculate movement in pixels. var pixelMovement = parseInt(newX - curX); //Determine new width. var newWidthL = parseInt(curWidthL + pixelMovement); var newWidthR = parseInt(curWidthR - pixelMovement); //Enforce a minimum width left. if (newWidthL < minWidthL) { newWidthR = document.getElementById("treeContainer").style.width - minWidthL; newWidthL = minWidthL; } // min width right if (newWidthR < minWidthR) { newWidthL = document.getElementById("treeContainer").style.width - minWidthR; newWidthR = minWidthR; } //Set the new width. document.getElementById("treeView").style.width = newWidthL + "px"; document.getElementById("treeList").style.width = newWidthR + "px"; //Set the new left of the splitter bar. document.getElementById("splitterBar").style.left = parseInt(document.getElementById("treeView").style.width) + 5; } } //--> </script> <style type="text/css"> body {height:100%;} #container { width: 90%; } #treeView{ top:20px; left:20px; height: 150px; width:250px; border: 1px solid #808080; overflow: hidden; } #treeList{ top:0px; left:20px; height: 150px; width:550px; border: 1px solid #808080; overflow: hidden; } /*status bar style to act as the bottom border of the div*/ #splitterBar{ float: left; cursor: e-resize; display:block; background-color: #c0c0c0; top:20px; left:262px; margin-top:0px; height:152px; padding:0; width: 4px; } </style> </head> <!--onmousemove and onmouseup are on the body tag whereas onmousedown is on the "splitterBar" div--> <body onmousemove="getPos(event)" onmouseup="mouseButtonPos='up'"> <div id="treeContainer"> <div id="treeView" style="float: left; height:150px; width: 250px; overflow: auto;"> <p>Deze div is 250px breed en kan breder gemaakt worden, maar helaas kan de div niet kleiner worden dan 150 pixels<br />Deze div is 250px breed en kan breder gemaakt worden, maar helaas kan de div niet kleiner worden dan 150 pixels<br />Deze div is 250px breed en kan breder gemaakt worden, maar helaas kan de div niet kleiner worden dan 150 pixels<br />Deze div is 250px breed en kan breder gemaakt worden, maar helaas kan de div niet kleiner worden dan 150 pixels<br /></p> </div> <div onmousedown="setPos(event)" id="splitterBar"></div> <div id="treeList" style="float: left; height:150px; width: 550px; overflow: auto;"> <p>Dit is de rechter div die 550pixels breed is, deze kan smaller en breder worden maar niet kleiner dan 250px;</p> </div> </div> </body> </html> |
1 2 3 | Source File: file:///D:/test1.html Line: 0 |
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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | <!-- // variables var curWidth = 0; var curX = 0; var newX = 0; var minWidthL = 150; // min width of left div var minWidthR = 300; // min width of right div var conWidth = 800; var mouseButtonPos = "up"; //Function 'setPos(...) gets the original div width. function setPos(e) { //For handling events in ie vs. w3c. curEvent = ((typeof event == "undefined")? e: event); //Sets mouse flag as down. mouseButtonPos = "down"; //Gets position of click. curX = curEvent.clientX; //Get the width of the div. var tempWidthL = document.getElementById("treeView").style.width; var tempWidthR = document.getElementById("treeList").style.width; //Get the width value. var widthArrayL = tempWidthL.split("p"); var widthArrayR = tempWidthR.split("p"); //Set the current width. curWidthL = parseInt(widthArrayL[0]); curWidthR = parseInt(widthArrayR[0]); } //Function getPos(...) changes the width of the div while the mouse button is pressed. function getPos(e){ if( mouseButtonPos == "down" ) { //For handling events in ie vs. w3c. curEvent = ((typeof event == "undefined")? e: event); //Get new mouse position. newX = curEvent.clientX; //Calculate movement in pixels. var pixelMovement = parseInt(newX - curX); //Determine new width. var newWidthL = parseInt(curWidthL + pixelMovement); var newWidthR = parseInt(curWidthR - pixelMovement); //Enforce a minimum width left. if (newWidthL < minWidthL) { newWidthR = parseInt(conWidth - minWidthL); newWidthL = minWidthL; } // min width right if (newWidthR < minWidthR) { newWidthL = parseInt(conWidth - minWidthR); newWidthR = minWidthR; } //Set the new width. defaultStatus = "L:" + newWidthL + " R:" + newWidthR; document.getElementById("treeView").style.width = newWidthL + "px"; document.getElementById("treeList").style.width = newWidthR + "px"; //Set the new left of the splitter bar. document.getElementById("splitterBar").style.left = parseInt(document.getElementById("treeView").style.width) + 5; } } //--> </script> <style type="text/css"> body {height:100%;} #container { width: 90%; } #treeView{ top:20px; left:20px; height: 150px; width:250px; border: 1px solid #808080; overflow: hidden; } #treeList{ top:0px; left:20px; height: 150px; width:550px; border: 1px solid #808080; overflow: hidden; } /*status bar style to act as the bottom border of the div*/ #splitterBar{ float: left; cursor: e-resize; display:block; background-color: #c0c0c0; top:20px; left:262px; margin-top:0px; height:152px; padding:0; width: 4px; } </style> </head> <!--onmousemove and onmouseup are on the body tag whereas onmousedown is on the "splitterBar" div--> <body onmousemove="getPos(event)" onmouseup="mouseButtonPos='up'"> <div id="treeContainer"> <div id="treeView" style="float: left; height:150px; width: 250px; overflow: auto;"> <p>Deze div is 250px breed en kan breder gemaakt worden, maar helaas kan de div niet kleiner worden dan 150 pixels<br />Deze div is 250px breed en kan breder gemaakt worden, maar helaas kan de div niet kleiner worden dan 150 pixels<br />Deze div is 250px breed en kan breder gemaakt worden, maar helaas kan de div niet kleiner worden dan 150 pixels<br />Deze div is 250px breed en kan breder gemaakt worden, maar helaas kan de div niet kleiner worden dan 150 pixels<br /></p> </div> <div onmousedown="setPos(event)" id="splitterBar"></div> <div id="treeList" style="float: left; height:150px; width: 550px; overflow: auto;"> <p>Dit is de rechter div die 550pixels breed is, deze kan smaller en breder worden maar niet kleiner dan 250px;</p> </div> </div> </body> </html> |
readOnly (met hoofdletter O) is een boolean, dus true of false.quote:Op maandag 21 mei 2007 21:31 schreef Swetsenegger het volgende:
Iemand een idee hoe ik met een onChange het readonly atribuut voor een form element kan triggeren?
onChange="getElementById('element').readonly='readonly'"
lijkt niet te werken in ieder geval
Bedankt!quote:Op maandag 21 mei 2007 21:36 schreef Litpho het volgende:
[..]
readOnly (met hoofdletter O) is een boolean, dus true of false.
1 |
http://www.xs4all.nl/~litpho/test.html werkt hier prima.quote:Op maandag 21 mei 2007 21:41 schreef Swetsenegger het volgende:
[..]
Bedankt!
Maar dit werkt ook niet
[ code verwijderd ]
Ook niet als ik true buiten quotes zet.
Ja, ziet er naar uit dat ik het niet op een select element kan toepassen, alleen op text elementen.quote:Op maandag 21 mei 2007 21:48 schreef Litpho het volgende:
[..]
http://www.xs4all.nl/~litpho/test.html werkt hier prima.
Weet je zeker dat de onchange getriggerd wordt?
Select heeft readOnly niet als property, maar is natuurlijk wel altijd read only. Heb je al naar disabled gekeken als alternatief?quote:Op maandag 21 mei 2007 21:52 schreef Swetsenegger het volgende:
[..]
Ja, ziet er naar uit dat ik het niet op een select element kan toepassen, alleen op text elementen.
quote:Op maandag 21 mei 2007 21:54 schreef Litpho het volgende:
[..]
Select heeft readOnly niet als property, maar is natuurlijk wel altijd read only. Heb je al naar disabled gekeken als alternatief?
Waarbij je er even rekening mee moet houden dat disabled elementen niet meegesubmit worden, dus bij een onsubmit evt. weer enabled moeten worden. Schoon is anders, maar misschien maakt het voor wat je wil niet uit.
* noteert weer een tevreden klant *quote:Op maandag 21 mei 2007 22:02 schreef Swetsenegger het volgende:
[..]die zocht ik.
Ik verwerk server side, dus de page wordt na een submit toch refreshed.
1 |
1 2 3 4 5 6 7 8 9 10 | function getData(url,id) { if (!http[id]) http[id] = getHTTPObject(); //prompt("Requested URL:",url); http[id].open("GET", url, true); http[id].send(null); http[id].onreadystatechange = httpResponse; } |
1 |
1 2 3 4 5 | alert('You rang? ' + http[id].readyState); if (http[id].readyState == 4) { if (http[id].responseXML){ |
1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | var http = new Array(); function getData(url, id) { if (!http[id]) { http[id] = getHTTPObject(); } var request = http[id]; request.open("GET", url, true); request.onreadystatechange = function() { if (request.readyState == 4) { processResponse(request.respnseXML); } } request.send(null); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | function verwissel (i1, i2) { var obj1 = document.getElementById(i1); var obj2 = document.getElementById(i2); var temp = obj1.innerHTML; obj1.innerHTML = obj2.innerHTML; obj2.innerHTML = temp; } </script> <span id="item1">Persoon 1</span> <a href="#" onclick="verwissel('item1', 'item2'); return false;">down</a><br /> <span id="item2">Persoon 2</span> <a href="#" onclick="verwissel('item2', 'item1'); return false;">up</a> <a href="#" onclick="verwissel('item2', 'item3'); return false;">down</a><br /> <span id="item3">Persoon 3</span> <a href="#" onclick="verwissel('item2', 'item3'); return false;">up</a><br /> |
1 2 3 4 5 6 7 | { var list1 = document.getElementById('l1'); var item2 = document.getElementById('i2'); var item3 = document.getElementById('i3'); list1.insertBefore(item3, item2); } |
1 2 3 4 5 6 | <li id="i1">uno</li> <li id="i2">due</li> <li id="i3">tre</li> <li id="i4">quattro</li> </ul> |
Bedankt!quote:Op dinsdag 29 mei 2007 20:47 schreef SuperRembo het volgende:
Als je case-insensitive wil zoeken in javascript dan akn dat met een regexp: myString.match(/foo/i)
(of zonder regexp: myString.toLowerCase().indexOf('foo'))
1 2 | xmlDoc.xml = xmlhttp.responseText; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | { xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async = false; xmlDoc.loadXML(xmlhttp.responseText); } else if (document.implementation && document.implementation.createDocument) { var parser = new DOMParser(); var xmlDoc = parser.parseFromString(xmlhttp.responseText,"text/xml"); } else { alert('Neem een andere brouwser!'); } |
1 2 3 4 5 6 7 8 9 10 11 | <gfxpoll> <action>layouts</action> <count>4</count> <layouts> <item>Default</item> <item>GFX</item> <item>Test</item> <item>Woei</item> </layouts> </gfxpoll> |
Die zocht ik dusquote:Op donderdag 31 mei 2007 19:08 schreef SuperRembo het volgende:
Waarom gebruik je niet gewoon XMLHttpRequest.responseXML?
Ik weet niet hoe lang jij al bezig bent met ajax maar het behelst heel wat meer dan alleen een xml pagina parsen hoor...quote:Op donderdag 31 mei 2007 20:32 schreef Geqxon het volgende:
Het wiel opnieuw uitvinden? Een XML pagina opvragen en parsen stelt toch weinig voor?
Tnx, Ik zal morgen eens kijken wat dit aan info oplevert!quote:Op donderdag 31 mei 2007 21:01 schreef SlimShady het volgende:
met *.childNodes *.parentChild *.nextSibling enzo.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |