PSD-Tutorials.de
Forum für Design, Fotografie & Bildbearbeitung
Tutkit
Agentur
Hilfe
Kontakt
Start
Forum
Aktuelles
Besonderer Inhalt
Foren durchsuchen
Tutorials
News
Anmelden
Kostenlos registrieren
Aktuelles
Suche
Suche
Nur Titel durchsuchen
Von:
Menü
Anmelden
Kostenlos registrieren
App installieren
Installieren
JavaScript ist deaktiviert. Für eine bessere Darstellung aktiviere bitte JavaScript in deinem Browser, bevor du fortfährst.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen
alternativen Browser
verwenden.
Antworten auf deine Fragen:
Neues Thema erstellen
Start
Forum
Sonstiges
Webdesign, Webentwicklung & Programmierung
PHP, Javascript, jQuery, Ajax, nodeJS, MySQL...
kleines problem mit javascript
Beitrag
<blockquote data-quote="Duddle" data-source="post: 2038572" data-attributes="member: 17775"><p><strong>AW: kleines problem mit javascript</strong></p><p></p><p>[HTML]</p><p><html></p><p> <head></p><p><script language="javascript" type="text/javascript"></p><p>var valueColorMapping = {};</p><p>// holt farb-id fuer namen</p><p>function getColorByName(name) {</p><p> if (valueColorMapping[name] === undefined) {</p><p> var max = -1;</p><p> for (var key in valueColorMapping) {</p><p> max = Math.max(valueColorMapping[key], max);</p><p> }</p><p> valueColorMapping[name] = max+1;</p><p> }</p><p> return valueColorMapping[name];</p><p>}</p><p>function getName() {</p><p> return getSelected().text;</p><p>}</p><p>function getValue() {</p><p> return getSelected().value;</p><p>}</p><p>function getSelected() {</p><p> var frm = document.getElementById("nameSelect");</p><p> return frm.options[frm.selectedIndex];</p><p>}</p><p></p><p>var timePlanned = new Date();</p><p>function updateTime() {</p><p> //setDate ist der Tag ... 0 wäre der letzte Tag vom vorigen Monat, ergo 1</p><p> timePlanned.setDate(1); </p><p> timePlanned.setHours(0); </p><p> timePlanned.setMinutes(0); </p><p> var slotTime = 15;</p><p></p><p> //in jQuery wäre folgendes ein 3-Zeiler ...</p><p> var inputs = document.getElementsByTagName("input");</p><p> for(var i in inputs) {</p><p> var inp = inputs[i];</p><p> if(!hasClass(inp, "assigment")) continue;</p><p> if(inp.value == -1) continue;</p><p> changeTime(slotTime);</p><p> }</p><p>}</p><p></p><p>function hasClass(element, cls) {</p><p> var r = new RegExp('\\b' + cls + '\\b');</p><p> return r.test(element.className);</p><p>}</p><p></p><p>function changeTime(diff) {</p><p> timePlanned.setMinutes(timePlanned.getMinutes() + diff);</p><p></p><p> var div = document.getElementById("total");</p><p> div.innerHTML = "<PRE>geplante zeit:"+(timePlanned.getDate()-1)+"d"+timePlanned.getHours()+"h"+timePlanned.getMinutes()+"m</PRE>";</p><p>}</p><p></p><p>function change(day, slot, canToggle) {</p><p> var newValue = getValue();</p><p> var newName = getName();</p><p> var input = document.getElementById("input_"+day+"_"+slot);</p><p> var img = document.getElementById("img_"+day+"_"+slot);</p><p></p><p> //default-Wert von canToggle ist true</p><p> canToggle = typeof canToggle !== 'undefined' ? canToggle : true;</p><p></p><p> //falls kein richtiger Name / value = 0, dann ausschalten</p><p> //gleiches für ein togglen bei gesetztem Namen</p><p> if(newValue == 0 || (input.value == newValue && canToggle)) {</p><p> //default</p><p> img.src = "img/plan/-1.png";</p><p> img.title = name;</p><p> input.value = -1;</p><p> } else { </p><p> img.src = "img/plan/"+getColorByName(newName)+".png";</p><p> img.title = newName;</p><p> input.value = newValue;</p><p> }</p><p>}</p><p></p><p>var lastClicked = {day:null, slot:null, colorId:null};</p><p>function click(e, day, slot) {</p><p> var e = e || window.event;</p><p> var newColor = getColorByName(getName());</p><p></p><p> if(e.ctrlKey && lastClicked.day != null && lastClicked.day == day && lastClicked.colorId == newColor) {</p><p> //Bereiche. nur im gleichen Tag möglich</p><p> var min = Math.min(lastClicked.slot, slot);</p><p> var max = Math.max(lastClicked.slot, slot);</p><p> for(var slotToChange = min; slotToChange <= max; slotToChange++) {</p><p> change(day, slotToChange, false);</p><p> }</p><p> } else {</p><p> change(day, slot);</p><p> }</p><p></p><p> lastClicked.day = day;</p><p> lastClicked.slot = slot;</p><p> lastClicked.colorId = newColor;</p><p> updateTime();</p><p>}</p><p></script></p><p> <style type="text/css"></p><p> .day {</p><p> text-align: center;</p><p> vertical-align: top;</p><p> font-size: 60%;</p><p> font-weight: bold;</p><p> }</p><p> .spc {</p><p> font-size: 50%;</p><p> }</p><p> img {</p><p> border: 0;</p><p> vertical-align: middle;</p><p> }</p><p> form {</p><p> margin: 0px;</p><p> padding: 0px;</p><p> }</p><p> </style></p><p> </head></p><p> <body><center></p><p> <input type="hidden" id="color" name="color"></p><p> <form action="" method="post"></p><p> <select id="nameSelect" name="pers"></p><p> <option value="0" selected>----</option></p><p> <option value="10">Rémi</option></p><p> <option value="20">Marcel</option></p><p> <option value="30">Michel</option></p><p> <option value="40">Christiane</option></p><p> <option value="50">Julien</option></p><p> <option value="60">Matthieu</option></p><p> <option value="70">Vincent</option></p><p> <option value="80">Stéphane</option></p><p> <option value="90">Marc</option></p><p> </select></p><p> <br /><br /><br /></p><p> <table summary="" border="0" cellspacing="0" cellpadding="0"></p><p> <tr></p><p> <td class="day" style="height:15px;">Hrs-></td></p><p><?php</p><p>if (isset($_POST['tab'])) {</p><p> print_r($_POST['tab']);</p><p>}</p><p>else for($j=0;$j<1;$j++) for($i=0;$i<96;$i++) $l[$j][$i]=-1;</p><p>$jrs = array("Lun","Mar","Mer","Jeu","Ven","Sam","Dim");</p><p>for($k=0;$k<24;$k++) echo '<td class="day" colspan="5">'.$k.'</td>';</p><p>echo "\r</tr>";</p><p>for($j=0;$j<1;$j++) {</p><p> echo '<tr></p><p> <td valign="middle">'.$jrs[$j].'&nbsp;</td>';</p><p> for($i=0;$i<96;$i++) {</p><p> if ($i%4==0) echo '<td class="spc">&nbsp;</td>';</p><p> $color = -1;</p><p> echo '<td valign="middle"></p><p> <input class="assigment" id="input_'.$j.'_'.$i.'" type="hidden" name="tab['.$j.']['.$i.']" value="'.$l[$j][$i].'" /></p><p> <img src="img/plan/'.$color.'.png" id="img_'.$j.'_'.$i.'" onClick="click(event,'.$j.','.$i.')" alt="" title="" /></p><p> </td>';</p><p> }</p><p> echo "\r</tr>\n\t";</p><p>}</p><p>?></p><p> </table></p><p> <br /></p><p> <input type="submit" value="enregistrer" /></p><p> </form></p><p> <div id='total' style="float:center; position:relative; center:75px;"></div></p><p> </center></body></p><p></html></p><p>[/HTML]</p><p>Die Logik von maj_img steckt jetzt in change(), wobei aber ausschliesslich mit Tag- und Slot-Nummer gearbeitet wird zur Identifizierung der Elemente. Zusätzlich ist noch ein optionales Argument dabei, welches bestimmt ob das zu setzende Feld getogglet werden kann. Das ist hilfreich bei Bereichs-Setzen. </p><p>Ausserdem wird noch unterschieden ob der derzeitige Klick für einen richtigen Namen kommt. Wenn nicht ("---" ausgewählt), wird das gelöscht. Damit kann man dann Bereiche löschen.</p><p></p><p>Der Event selbst, und die Unterscheidung ob Bereich oder nicht, ist in der kreativ als click() bezeichneten Funktion. Ich habe hier nur STRG genommen, weil ALT bei mir mit anderen Funktionen belegt ist. Ein Bereich darf nur im gleichen Tag und mit der gleichen Person gesetzt werden. Der Rest sollte eindeutig sein.</p><p></p><p>Die dritte Änderung ist die Verwaltung der zugewiesenen Gesamtzeit. Jetzt wird einfach nach jedem Klick gezählt wieviele zugewiesen sind und die Zeit entsprechend berechnet. Das ist zwar immer noch nicht ideal, aber meiner Meinung nach besser als vorher.</p><p></p><p>So, jetzt bin ich gespannt, was als nächstes im <a href="http://en.wikipedia.org/wiki/Feature_creep" target="_blank">feature creep</a> kommt <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="smilie smilie--sprite smilie--sprite1" alt=":)" title="Smile :)" loading="lazy" data-shortname=":)" /></p><p></p><p></p><p>Duddle</p></blockquote><p></p>
[QUOTE="Duddle, post: 2038572, member: 17775"] [b]AW: kleines problem mit javascript[/b] [HTML] <html> <head> <script language="javascript" type="text/javascript"> var valueColorMapping = {}; // holt farb-id fuer namen function getColorByName(name) { if (valueColorMapping[name] === undefined) { var max = -1; for (var key in valueColorMapping) { max = Math.max(valueColorMapping[key], max); } valueColorMapping[name] = max+1; } return valueColorMapping[name]; } function getName() { return getSelected().text; } function getValue() { return getSelected().value; } function getSelected() { var frm = document.getElementById("nameSelect"); return frm.options[frm.selectedIndex]; } var timePlanned = new Date(); function updateTime() { //setDate ist der Tag ... 0 wäre der letzte Tag vom vorigen Monat, ergo 1 timePlanned.setDate(1); timePlanned.setHours(0); timePlanned.setMinutes(0); var slotTime = 15; //in jQuery wäre folgendes ein 3-Zeiler ... var inputs = document.getElementsByTagName("input"); for(var i in inputs) { var inp = inputs[i]; if(!hasClass(inp, "assigment")) continue; if(inp.value == -1) continue; changeTime(slotTime); } } function hasClass(element, cls) { var r = new RegExp('\\b' + cls + '\\b'); return r.test(element.className); } function changeTime(diff) { timePlanned.setMinutes(timePlanned.getMinutes() + diff); var div = document.getElementById("total"); div.innerHTML = "<PRE>geplante zeit:"+(timePlanned.getDate()-1)+"d"+timePlanned.getHours()+"h"+timePlanned.getMinutes()+"m</PRE>"; } function change(day, slot, canToggle) { var newValue = getValue(); var newName = getName(); var input = document.getElementById("input_"+day+"_"+slot); var img = document.getElementById("img_"+day+"_"+slot); //default-Wert von canToggle ist true canToggle = typeof canToggle !== 'undefined' ? canToggle : true; //falls kein richtiger Name / value = 0, dann ausschalten //gleiches für ein togglen bei gesetztem Namen if(newValue == 0 || (input.value == newValue && canToggle)) { //default img.src = "img/plan/-1.png"; img.title = name; input.value = -1; } else { img.src = "img/plan/"+getColorByName(newName)+".png"; img.title = newName; input.value = newValue; } } var lastClicked = {day:null, slot:null, colorId:null}; function click(e, day, slot) { var e = e || window.event; var newColor = getColorByName(getName()); if(e.ctrlKey && lastClicked.day != null && lastClicked.day == day && lastClicked.colorId == newColor) { //Bereiche. nur im gleichen Tag möglich var min = Math.min(lastClicked.slot, slot); var max = Math.max(lastClicked.slot, slot); for(var slotToChange = min; slotToChange <= max; slotToChange++) { change(day, slotToChange, false); } } else { change(day, slot); } lastClicked.day = day; lastClicked.slot = slot; lastClicked.colorId = newColor; updateTime(); } </script> <style type="text/css"> .day { text-align: center; vertical-align: top; font-size: 60%; font-weight: bold; } .spc { font-size: 50%; } img { border: 0; vertical-align: middle; } form { margin: 0px; padding: 0px; } </style> </head> <body><center> <input type="hidden" id="color" name="color"> <form action="" method="post"> <select id="nameSelect" name="pers"> <option value="0" selected>----</option> <option value="10">Rémi</option> <option value="20">Marcel</option> <option value="30">Michel</option> <option value="40">Christiane</option> <option value="50">Julien</option> <option value="60">Matthieu</option> <option value="70">Vincent</option> <option value="80">Stéphane</option> <option value="90">Marc</option> </select> <br /><br /><br /> <table summary="" border="0" cellspacing="0" cellpadding="0"> <tr> <td class="day" style="height:15px;">Hrs-></td> <?php if (isset($_POST['tab'])) { print_r($_POST['tab']); } else for($j=0;$j<1;$j++) for($i=0;$i<96;$i++) $l[$j][$i]=-1; $jrs = array("Lun","Mar","Mer","Jeu","Ven","Sam","Dim"); for($k=0;$k<24;$k++) echo '<td class="day" colspan="5">'.$k.'</td>'; echo "\r</tr>"; for($j=0;$j<1;$j++) { echo '<tr> <td valign="middle">'.$jrs[$j].' </td>'; for($i=0;$i<96;$i++) { if ($i%4==0) echo '<td class="spc"> </td>'; $color = -1; echo '<td valign="middle"> <input class="assigment" id="input_'.$j.'_'.$i.'" type="hidden" name="tab['.$j.']['.$i.']" value="'.$l[$j][$i].'" /> <img src="img/plan/'.$color.'.png" id="img_'.$j.'_'.$i.'" onClick="click(event,'.$j.','.$i.')" alt="" title="" /> </td>'; } echo "\r</tr>\n\t"; } ?> </table> <br /> <input type="submit" value="enregistrer" /> </form> <div id='total' style="float:center; position:relative; center:75px;"></div> </center></body> </html> [/HTML] Die Logik von maj_img steckt jetzt in change(), wobei aber ausschliesslich mit Tag- und Slot-Nummer gearbeitet wird zur Identifizierung der Elemente. Zusätzlich ist noch ein optionales Argument dabei, welches bestimmt ob das zu setzende Feld getogglet werden kann. Das ist hilfreich bei Bereichs-Setzen. Ausserdem wird noch unterschieden ob der derzeitige Klick für einen richtigen Namen kommt. Wenn nicht ("---" ausgewählt), wird das gelöscht. Damit kann man dann Bereiche löschen. Der Event selbst, und die Unterscheidung ob Bereich oder nicht, ist in der kreativ als click() bezeichneten Funktion. Ich habe hier nur STRG genommen, weil ALT bei mir mit anderen Funktionen belegt ist. Ein Bereich darf nur im gleichen Tag und mit der gleichen Person gesetzt werden. Der Rest sollte eindeutig sein. Die dritte Änderung ist die Verwaltung der zugewiesenen Gesamtzeit. Jetzt wird einfach nach jedem Klick gezählt wieviele zugewiesen sind und die Zeit entsprechend berechnet. Das ist zwar immer noch nicht ideal, aber meiner Meinung nach besser als vorher. So, jetzt bin ich gespannt, was als nächstes im [URL="http://en.wikipedia.org/wiki/Feature_creep"]feature creep[/URL] kommt :) Duddle [/QUOTE]
Bilder bitte
hier hochladen
und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Zitate einfügen…
Authentifizierung
Wenn ▲ = 5, ▼ = 2 und ■ = 7, was ist ▲ × ▼ + ■?
Antworten
Start
Forum
Sonstiges
Webdesign, Webentwicklung & Programmierung
PHP, Javascript, jQuery, Ajax, nodeJS, MySQL...
kleines problem mit javascript
Oben