radio button aktivieren in <div> container
selfmade01
- javascript
Hallo,
ich bei mir werden nach klick bestimmte <div> container an eine bestimmte Stelle gesetzt.
Diese Container haben zwei radio buttons.
Die radio buttons sind dafür zuständig das nur bestimmte <input> Felder gesperrt werden oder offen sind.
Bei onclick funktioniert das ganze schon gut.
ich muss jedoch die Eingabefelder schon zuvor sperren entweder die einen oder die anderen (welche ist egal)
hier der code des containers der nachgeladen wird (achtung das ganze wird mittels ajax nachgeladen so dass die gesamte Seite eigentlich nicht geladen wird !
<input type="radio" name="radio'.$week.'" id="v'.$week.'" onclick="this.form.phBMin'.$week.'.disabled = this.form.phBMax'.$week.'.disabled = this.form.ecBMin'.$week.'.disabled = this.form.ecBMax'.$week.'.disabled = true; this.form.phVMin'.$week.'.disabled = this.form.phVMax'.$week.'.disabled = this.form.ecVMin'.$week.'.disabled = this.form.ecVMax'.$week.'.disabled = false ;" /> <label for="v'.$week.'" class="inline">
$week ist eigentlich nur dazu da, um den namen und den ID's eine Eindeutigkeit zu geben, damit später wenn eine neue Zeile hinzugefügt wird auch diesee felder wieder eindeutig sind.
das was hier oben die onclick funktion macht möchte ich nun das dies automatisch passiert sobald der Conatiner geladen wird.
Wäre super wenn mir das jemand zeigen könnte bzw. für Anfänger erklärt
Danke
Grüße Jürgen
Aloha ;)
Dass du die Hinweise in den anderen Threads, was tabellarische Daten angeht, immer noch gekonnt ignorierst, will ich jetzt mal nicht extra thematisieren.
Bei onclick funktioniert das ganze schon gut.
onclick ist dafür falsch. Du solltest besser onchange benutzen und jedesmal abprüfen, ob der radio-button gerade an- oder abgewählt wurde und dann dementsprechend disabled auf true oder false setzen. Das spart dir einiges an unnötigem Code - nicht zu vergessen, dass onclick nicht gefeuert wird, wenn die Auswahl anders als per Klick erfolgt.
das was hier oben die onclick funktion macht möchte ich nun das dies automatisch passiert sobald der Conatiner geladen wird.
Fernab dessen, dass du das hier nun nicht mehr brauchen wirst:
In element.onclick ist eine JavaScript-Variable des Typs function
gespeichert. Nichts hält dich davon ab, diese explizit aufzurufen: element.onclick();
Ich hoffe ich bereue nicht schon wieder, dir hiermit einen Weg gezeigt zu haben, der auch funktioniert, aber weniger sinnvoll ist...
Grüße,
RIDER
Hallo,
zu tabellarischen Daten.
ich ignoriere gar nichts, glaub mir das einfach mal.
Es kann jedoch sein das ich eine Antwort überlese oder nicht mitbekam... sorry
Dann wenn ich eine Code poste der ein Mischmasch von <div> container in <tr> und td ist so war das ein grober Fehler von mir da ich kein copy and paste mache
sorry auch das war ein Fehler und mein Code hier besteht entweder aus einer normalen tablelle also <table> oder eben im aktuellen Fall aus <div> container und wenn div container dann nur diese da ich dies begriffen habe das div kein Kind einer tabelle sein kann
Für meinen Hausgebrauch komme ich eigentlich in php, mysql und auch html noch ganz gut zurecht und vergleiche mich nicht mit Profis wie hier im Forum die was evtl. Tag täglich machen.
Aus diesem Grund sind meine Fragen oft missverständlich und auch meine Beschreibungen...
auch sorry hierfür
Das was für Dich und viel hier vollkommen logisch ist und was viele hier sich aus zwei Sätzen im Netz schnell aneignen können das ist es für mich leider nicht.
Dafür gibt es bestimmt andere Dinge die für mich logisch sind und für andere eben weniger und die hier auch 100 mal nachfragen müssen
Aber nun zur Sache...
und Danke für Deine Geduld
Wenn ich onchange verwende dann muss ich doch das in jedem inputfeld dann habe ich doch die gleiche code-menge und noch mehr evtl.
Noch dazu muss ich den Zustand des radios abfragen bei jedem onchange
Du schreibst das hier in zwei Sätzen auf und ein Anfänger soll daraus schlau werden
Wenn ich schon den ganzen Schlonz drin habe und der onclick funktioniert (natürlich nur bei klick)
geht es dann nicht das ich aktiv beim laden des Containers dann diesen klick auslöse so das er die zellen sperrt?
Wenn das nicht geht, dann bitte ein kleines Beispiel...
aus zwei Sätzen werde ich leider nicht schlau
Danke
Grüße Jürgen
Aloha ;)
zu tabellarischen Daten.
ich ignoriere gar nichts, glaub mir das einfach mal.
Es kann jedoch sein das ich eine Antwort überlese oder nicht mitbekam... sorry
[...]
auch sorry hierfür
Akzeptiert. Entschuldige meine genervte Reaktion, das war auch nicht ganz korrekt.
Aber nun zur Sache...
und Danke für Deine Geduld
Kein Problem ;)
Wenn ich onchange verwende dann muss ich doch das in jedem inputfeld dann habe ich doch die gleiche code-menge und noch mehr evtl.
Noch dazu muss ich den Zustand des radios abfragen bei jedem onchange
Das Abfragen des Zustandes ist einfach. Das beläuft sich auf
if (this.checked) { ....disabled=false; } else { ....disabled=true; }
onclick musst du außerdem auch jetzt schon bei jedem inputfeld (bzw. dem zugehörigen Radio-Button) benutzen. Im Optimalfall reduziert sich deine Codemenge sogar drastisch, da du das ganze in einer einzigen Funktion in einem <script>-Bereich oder (noch besser) in einer externen Javascript-Datei zentralisieren kannst, a la
**Bitte meinen Kommentar GAAANZ unten dazu noch lesen...
function radioSelect (radio,triggerAll) {
if (radio.checked) { radio...disabled=false; } else { radio...disabled=true; }
//Das folgende brauchst du weil -> Kommentar **
if (triggerAll) {
var elms = document.getElementsByName(this.name);
for (var i = 0; i < elms.length; i++) { radioSelect(elms[i],false); }
}
}
und im html dann
<input type="radio" name="..." onchange="radioSelect(this,true);">
Das bläht die Sache also nicht auf, sondern - im Gegenteil - macht sie schlanker und lesbarer. BTW: Ob sich die Codemenge aufbläht oder nicht wäre so oder so kein Argument, da der Funktionalitätsbenefit eines onchange über ein onclick in diesem Fall deutlich mehr wiegen sollte als der reine einmalige Coding-Aufwand.
Du schreibst das hier in zwei Sätzen auf und ein Anfänger soll daraus schlau werden
Tja, das hat schon seine Gründe :D Wenn du mir die Bemerkung gestattest: Ein Anfänger sollte sich nicht übernehmen. Wenn du tatsächlich ein Anfänger bist, dann hast du den Griff zu JavaScript / PHP zu schnell gemacht :D Beim Lernen gilt eigentlich: Ein Stückchen nach dem Anderen. Zunächst HTML verstehen, dann CSS, und dann (diesmal in beliebiger Reihenfolge) JavaScript und PHP. Und mit Verstehen meine ich nicht, alles mögliche schonmal gelesen/gesehen zu haben. Da gehört viel Übung dazu ;) War bei keinem hier anders...
Wenn ich schon den ganzen Schlonz drin habe und der onclick funktioniert (natürlich nur bei klick)
geht es dann nicht das ich aktiv beim laden des Containers dann diesen klick auslöse so das er die zellen sperrt?
Doch, schon. Sogar ganz einfach, wenn du es so machst wie von mir vorgeschlagen. Grundsätzlich ist ja immer maximal ein Input aktiviert (wenn ich dich richtig verstanden habe). Die Lösung ist also in etwa so möglich:
//beim Laden einer neuen Zeile...
//alle Radios aus (dazu reichts den ersten an und dann wieder aus zu machen!
// -> Ungewöhnlich, aber wirkungsvoll
document.getElementsByName('RADIO-NAME')[0].checked = true;
document.getElementsByName('RADIO-NAME')[0].checked = false;
// und dessen onchange nochmal einzeln manuell feuern, weil Kommentar
radioSelect(document.getElementsByName('RADIO-NAME')[0],false);
aus zwei Sätzen werde ich leider nicht schlau
Ist okay. Hoffe, das war genug Beispiel ;)
Grüße,
RIDER
** KOMMENTAR: Leider verhält sich onchange nicht so, wie ich es gerne hätte und wie ich es logisch fände. Laut meinen Tests und einer längeren Googlesuche ist es so, dass onchange leider nur beim Anwählen eines Radio-Buttons feuert, beim Abwählen passiert leider nicht die Bohne. Für mich nicht logisch, aber so ist es halt.
Hinweis für Fortgeschrittene: Stattdessen könne man wohl auch das onchange der Radio-Gruppe abfangen und darin die Select-Funktion für alle Radio-Member abfeuern. Sicherlich eleganter als mein "einfacher" Workaround hier.
Hallo,
wow, vielen Dank für diese ausführliche Beschreibung.
Das Abfragen des Zustandes ist einfach. Das beläuft sich auf
if (this.checked) { ....disabled=false; } else { ....disabled=true; }
ich glaub das ich jetzt so langsam dahinter komme.
dazu unten mehr
in einer externen Javascript-Datei zentralisieren kannst, a la
Ja, mit den richtig korrekt geschrieben functions bestimmt nur besonders in javascript (da hatte ich mich früher schon davor geflüchtet.
Als ich mit zwei anderen Berufsprogrammieren früher mal an einer Webablikation (war damals sowas ähnliches wie googlemail )geschraubt habe hatte ich mich nur ums Frontend mit php und einer mysql dahinter gekümmert und das in einem 20std/7 Tage Job auf ein Jahr. aber das ist ewig her und bis auf ein paar php und mysql Sachen ist nicht viel hängen geblieben. Der Aufbau der Webseite war auch im ganz banalen html ohne css . Die es später nutzen hatten es nicht gemerkt :) und sauber sah es auch noch aus.
**Bitte meinen Kommentar GAAANZ unten dazu noch lesen...
den habe ich ganz aufmreksam gelesen
function radioSelect (radio,triggerAll) {
if (radio.checked) { radio...disabled=false; } else { radio...disabled=true; }
//Das folgende brauchst du weil -> Kommentar **
if (triggerAll) {
var elms = document.getElementsByName(this.name);
for (var i = 0; i < elms.length; i++) { radioSelect(elms[i],false); }
}
}
>
> und im html dann
>
> `<input type="radio" name="..." onchange="radioSelect(this,true);">`{:.language-html}
>
hier habe ich fast alles verstanden und kann es sehr gut nachvollziehen und auch sofort erkennen das es weniger Aufwand ist. danke
Aber...
genau das hier
~~~javascript
{ radio...disabled=false; }
sowie ich das verstehe prüft er den einen bestimmten radio button ab ob er ausgewählt wurde dann
fragt er triggerAll all ab (muss mal sehn was das ist, werde ich schon im netz finden, kein problem!) und ermittelt so alle getElementsByName name="xyz1"od name="xyy1" und setzt diese auf false , also sperrt diese eingabefelder oder?
Frage:
da er aber doch somit alle Felder ermittelt würde auch alle Felder sperren ?
ich möchte aber nur 4 on den 8 Feldern sperren
Du schreibst das hier in zwei Sätzen auf und ein Anfänger soll daraus schlau werden
Tja, das hat schon seine Gründe :D Wenn du mir die Bemerkung gestattest: Ein Anfänger sollte sich nicht übernehmen. Wenn du tatsächlich ein Anfänger bist, dann hast du den Griff zu JavaScript / PHP zu schnell gemacht :D Beim Lernen gilt eigentlich: Ein Stückchen nach dem Anderen. Zunächst HTML verstehen, dann CSS,
Ja, da hast Du wohl recht und glaube mir, damals als ich vor über 15 Jahren mal über 1 Jahr lang hardcore hinterm pc mir php und mysql reingezogen hatte musste ich meine Berufsprogrammiereer immer mit einigen Bier bei Laune halten da ich sie echt nervte... aaaaber nach ca 3 Monaten war ich ziemlich drin und brauchte sie nur ab und an.
Mein großes Manko ist.
Ich brauche Beispiele ... ich muss das nachvollziehen können..
Vor kurzem hatte mir jemand ein Beispiel mit Ajax gegeben wie ich eine Seite nachladen kann.
Das war genial.. bis vor kurzem konnte ich mit dem teil sehr viel machen und es auch nach wunsch abändern... so lerne ich dazu und begreife es mehr und mehr.
ich muss mich da ganz einfach hart reinarbeiten und muss auch wohl viele Profis nerven.. ich weiss ja wie ich lerne.. der eine liest ein paar zeilen und kapiert es dann und ich muss es an Beispielen sehen....Nur wenn ich es dann kapiert habe und weiter drauf aufbaue, dann kracht es bei mir richtig durch und ich kann sehr sehr viel damit anstellen.. aber es dauert bis ich es gefressen habe.
Aber mit ein paar code-brocken bzw. mit zwei wörtern die auf eine javascript anweisung hindeuten... phooo da bin ich total überfordert... das reicht mir in php.. aber in javascript und noch dazu vielleicht in jquery dieser total verqueren programmierlogik da streck ich die Flügel.
Wenn ich mal noch ein/zwei Monate hinter mir habe dann bin ich vielleicht schon ein bisschen besser drin.
Aber bis dahin muss ich ja ein wenig weiter kommen
Doch, schon. Sogar ganz einfach, wenn du es so machst wie von mir vorgeschlagen. Grundsätzlich ist ja immer maximal ein Input aktiviert (wenn ich dich richtig verstanden habe). Die Lösung ist also in etwa so möglich:
Eben nicht... das ist ja das Problem.alle 8 inputs sind aktiviert und das ist der Mist.
Es werden doch immer nur Div-container nachgeladen. Einer davon beinhaltet die radio-buttons
tzzz diese kann ich zwar mit checked vorselektieren. Der Button leuchtet dann auch wunderbar, aber das juckt die Eingabefelder nicht... der User kann trotzdem reinschreiben..
Erst wenn der user den onclick angewendet hat (sofern er so schlau war und diesen entdeckt hat) also bei klick auf den radio-button dann werden auch die felder gesperrt und genau das wollte ich automatisieren so dass von anfang (also schon beim laden der div container mit den radios die ja auch geladen werden ) an schon bestimmte felder gesperrt sind und der user zum klicken auf die radios gezwungen wird falls er woanders was eintragen will
die container die geladen werden sehen so aus
echo '<form name="form'.$week.'" action="#" >';// form habe ich nur wegen der radios
==> bis hier hin ist die erste zeile
inklusive des form-tags und der bereits geladenen zeilen inkl. der bereits pro zeile bestehenden radio-buttons
</div>
der öffnende Form-tag wird nur einmal bei der ersten zeile geladen !!!!
ab hier werden neue Zeilen geladen und der rest der vorhandene Container wird gelöscht
da sind nur noch der addnewrow-button und das schliessende form-tag sowie der schliessende div-tag die gelöscht und durch das folgende ersetzt werden
echo '<div class="col_12">';//macht die Pseudotabelle bzw. pseudo-zeile auf 1200px breit
echo '<div><input type="radio" id="test1'.$woche.'" checked="checked"></div>';
echo '<div><input type="radio" id="test2'.$woche.'" checked="checked"></div>';
echo '<div><input type="number" step="0.01" min="0" max="99.99" id="phBMin'.$week.'" name="phBMin'.$week.'"></input></div>
..../hier kommen noch 7 solcher <input>
echo '</form>';
echo '<div>.... hier kommt noch der addnewrow-botton der wird auch mit geladen da der alte gelöscht wird</div>';
echo '</div>';
so ungefähr sieht das aus was ständig nachgeladen wird
//beim Laden einer neuen Zeile...
//alle Radios aus (dazu reichts den ersten an und dann wieder aus zu machen!
// -> Ungewöhnlich, aber wirkungsvoll
document.getElementsByName('RADIO-NAME')[0].checked = true;
document.getElementsByName('RADIO-NAME')[0].checked = false;
// und dessen onchange nochmal einzeln manuell feuern, weil Kommentar
radioSelect(document.getElementsByName('RADIO-NAME')[0],false);
ok das sieht gut aus
aaaaber
wenn ich die radios mit getElementsByName('RADIO-NAME')[0] anspreche... mmmhh
wie ist das dann wenn ich wie oben im code sichtbar als name="radio" habe und ich bei jedem laden nur 2 radios habe so habe ich doch immer die gleichen array-werte oder?
also
radio[0] und radio[1}
diese habe ich bei Zeile 1, 2 ,3 und bei jeder neu ´dazu kommenden zeile
Da ich kein echtes Formular habe brauche ich das form-tag nur für die radio-buttons (so dachte ich)
die eingetragene werte der <input> felder sende ich eh alle über ajax und einem php-script zur Datenbank
>
>
> \*\* KOMMENTAR: Leider verhält sich onchange nicht so, wie ich es gerne hätte und wie ich es logisch fände. Laut meinen Tests und einer längeren Googlesuche ist es so, dass onchange leider nur beim Anwählen eines Radio-Buttons feuert, beim Abwählen passiert leider nicht die Bohne. Für mich nicht logisch, aber so ist es halt.
>
> Hinweis für Fortgeschrittene: Stattdessen könne man wohl auch das onchange der Radio-Gruppe abfangen und darin die Select-Funktion für alle Radio-Member abfeuern. Sicherlich eleganter als mein "einfacher" Workaround hier.
ich werde das obige Beispiel von dir mal probieren und gebe dann bescheid ob ich zurecht kam.
Grüße Jürgen
@@selfmade01:
nuqneH
hatte ich mich nur ums Frontend mit php und einer mysql dahinter gekümmert
Und heute bist Recruiter? Die verwechseln auch öfter Frontend und Backend.
Qapla'
Sorry das ich mich fachlich nicht korrekt ausdrücke, aber wenn ich was programmiere was später beim client erscheint also die tatsächliche html-ausgabe so ist das für mich das frontend ... für dich und alle anderen vielleicht das backend da es um date der db geht die hier mit einfliessen
Grüße Jürgen
@@selfmade01:
nuqneH
Sorry das ich mich fachlich nicht korrekt ausdrücke, aber wenn ich was programmiere was später beim client erscheint also die tatsächliche html-ausgabe so ist das für mich das frontend ... für dich und alle anderen vielleicht das backend da es um date der db geht die hier mit einfliessen
Dass du Probleme hast, Frontend und Backend zu unterscheiden, zeigt sich auch an deinem Code. HTML-Tags sollten niemals mit PHP echo …;
generiert werden.
echo '[code lang=html]<div class="col_12">
';//macht die Pseudotabelle bzw. pseudo-zeile auf 1200px breit[/code]
Hier macht das auch überhaupt keinen Sinn.
echo '[code lang=html]<div><input type="radio" id="test1
'.$woche.'" checked="checked"></div>
';[/code]
Nicht HTML in PHP schachteln, sondern andersrum: PHP in HTML:
<div><input type="radio" id="test1<?php [code lang=php]echo $woche;
?>" checked="checked"></div>
[/code]
Oder in einer Template-Sprache wie Smarty:
<div><input type="radio" id="test1[code lang=smarty]{$woche}
" checked="checked"></div>
[/code]
echo '[code lang=html]<div><input type="number" step="0.01" min="0" max="99.99" id="phBMin
'.$week.'" name="phBMin'.$week.'"></input></div>
[/code]
Da ist dir am Ende wohl ';
verloren gegangen.
Außerdem gibt es in HTML keinen </input>
-End-Tag.
Und wieso heißt es einmal $woche
und andermal $week
?
Der Codeblock sähe dann so aus:
<div class="col_12">
<div><input type="radio" id="test1<?php [code lang=php]echo $woche;
~~~ ?>" checked="checked"></div>
<div><input type="radio" id="test2<?php `echo $woche;`{:.language-php} ?>" checked="checked"></div>
<div><input type="number" step="0.01" min="0" max="99.99" id="phBMin<?php `echo $week;`{:.language-php} ?>" name="phBMin<?php `echo $week;`{:.language-php} ?>">
</div>[/code]
Deutlich besser lesbar.
Qapla'
--
„Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
Hallo,
ich habe jetzt folgende Funktion
function radioSelect (radio,triggerAll) {
if (radio.checked)
{
disabled=false;
} else {
disabled=true;
}
//Das folgende brauchst du weil -> Kommentar **
if (triggerAll) {
var elms = document.getElementsByName(this.name);
for (var i = 0; i < elms.length; i++)
{
radioSelect(elms[i],false);
}
}
}
dann habe ich in allen Zeilen die geladen werden
echo '<div><input type="radio" name="radio'.$week.'" id="v'.$week.'" onchange="radioSelect(this,true);"/> <label for="v'.$week.'" ></label>
<input type="radio" name="radio'.$week.'" id="b'.$week.'" onchange="radioSelect(this,true);"/> <label for="b'.$week.'" class="inline"></label></div>';
echo '<div ><input id="pVMin'.$week.'" name="pVMin'.$week.'" type="number" step="0.01" min="0" max="99.99" placeholder="'._('6.50').'" onchange="radioSelect(this,true);"/></div>' ;
echo '<div ><input id="pVMax'.$week.'" name="pVMax'.$week.'" type="number" step="0.01" min="0" max="99.99" placeholder="'._('6.90').'" onchange="radioSelect(this,true);"/></div>';
.
.
.usw.
echo '<div id="tab'.$tabrid.'">';
// hier steht der add-new-row-botton der immer ausgetauscht wird
// genau an diese Stelle werden dann die neuen Conatiner geschoben und auch der neue Button
echo '<div>';
dein zusätzlicher Code
//beim Laden einer neuen Zeile...
//alle Radios aus (dazu reichts den ersten an und dann wieder aus zu machen!
// -> Ungewöhnlich, aber wirkungsvoll
document.getElementsByName('radio')[0].checked = true;
document.getElementsByName('radio')[0].checked = false;
// und dessen onchange nochmal einzeln manuell feuern, weil Kommentar
radioSelect(document.getElementsByName('radio')[0],false);
muss dieser code noch in die function?
und der
radioSelect(document.getElementsByName('radio')[0],false);
wo muss der noch hin?
sorry, aber ich sagte ja, ich bräuchte was ich verwenden kann...nur dann kann ich es richtig nachvollziehen..... wenn ich nicht weiss wo was hinkommt dann drehe ich mich noch wochen lang im kreis
für euch mag das alles logisch sein,,,, aber leider für mich nicht
Grüße Jürgen
Aloha ;)
if (triggerAll) {
Zu deiner Frage im anderen Posting: triggerAll ist ein Parameter, der bei Funktionsaufruf definiert wird (lies: der ist kein integraler Sprachbestandteil, den haben wir selbst ins Leben gerufen). Zu seiner Funktion: Wir setzen ihn true, wenn ein Aufruf der Funktion über onchange kommt - denn dann sollen auch die onchange-Funktionen (in diesem Fall die radioSelect-Funktion mit entsprechendem Parameter) der anderen Radio-Buttons mit aufgerufen werden. Wenn wir innerhalb des onchange Vorgang sind und radioSelect für alle anderen Radio-Buttons aufrufen, setzen wir ihn logischerweise false - denn ansonsten würden wir ja eine Endlosschleife provozieren. Stell dir vor radio-Button 1 ruft radioSelect auf, das ruft radioSelect für radio-Button 1-5 auf, das wiederum ruft jeweils radioSelect für radio-Button 1-5 auf ... und am Ende stürzt der Browser ab ;)
Kurz gesagt: triggerAll ist bei Aufruf über EventHandler true und bei direktem, rekursivem Aufruf false.
echo '<div><input type="radio" name="radio'.$week.'" id="v'.$week.'" onchange="radioSelect(this,true);"/> <label for="v'.$week.'" ></label>
<input type="radio" name="radio'.$week.'" id="b'.$week.'" onchange="radioSelect(this,true);"/> <label for="b'.$week.'" class="inline"></label></div>';echo '<div ><input id="pVMin'.$week.'" name="pVMin'.$week.'" type="number" step="0.01" min="0" max="99.99" placeholder="'._('6.50').'" onchange="radioSelect(this,true);"/></div>' ;
echo '<div ><input id="pVMax'.$week.'" name="pVMax'.$week.'" type="number" step="0.01" min="0" max="99.99" placeholder="'._('6.90').'" onchange="radioSelect(this,true);"/></div>';
.
.
.usw.echo '<div id="tab'.$tabrid.'">';
// hier steht der add-new-row-botton der immer ausgetauscht wird
// genau an diese Stelle werden dann die neuen Conatiner geschoben und auch der neue Button
echo '<div>';
Sieht soweit einigermaßen aus wie im Sinne des Erfinders... Zumindest fast. Warum jetzt auf einmal auch die <input type="number" eine onchange-Funktion "radioSelect" haben, weiß ich nicht? Sinnigerweise sollten nur die <input type="radio" auf radioSelect hören. Sonst bekommst du ein Verhalten, das du so garantiert nicht willst (bzw.: Es wird nichts ändern, nur JavaScript-Fehler werfen wie Hölle, da die input-number kein Geschwisterelement namens input haben :P ).
> dein zusätzlicher Code
> ~~~javascript
> //beim Laden einer neuen Zeile...
> //alle Radios aus (dazu reichts den ersten an und dann wieder aus zu machen!
> // -> Ungewöhnlich, aber wirkungsvoll
> document.getElementsByName('radio')[0].checked = true;
> document.getElementsByName('radio')[0].checked = false;
> // und dessen onchange nochmal einzeln manuell feuern, weil Kommentar
> radioSelect(document.getElementsByName('radio')[0],false);
>
muss dieser code noch in die function?
Ne. Der muss dahin, wo, Zitat
//beim Laden einer neuen Zeile...
also sobald AJAX eine neue Zeile anfordert, an dieser Stelle müssen diese Codezeilen stehen. Zumindest hattest du ja gesagt, dass beim Laden einer neuen Zeile alle input-Felder gesperrt werden sollten.
Für 'radio' musst du natürlich noch den name der radio-Buttons einsetzen, die betroffen sein sollen.
und der
radioSelect(document.getElementsByName('radio')[0],false);
>
> wo muss der noch hin?
Direkt dahin, wo er oben im Codeschnipsel steht. Das Codeschnipsel ist eine funktionale Einheit.
> sorry, aber ich sagte ja, ich bräuchte was ich verwenden kann...nur dann kann ich es richtig nachvollziehen..... wenn ich nicht weiss wo was hinkommt dann drehe ich mich noch wochen lang im kreis
>
> für euch mag das alles logisch sein,,,, aber leider für mich nicht
Tja. Ich glaube wir stehen vor einem ernsten Problem. Für mich stellt sich die Situation grad so dar: Du postest Codefragmente und umschreibst das Problem. Ich tätige aufgrund mangelnder-Insiderkenntnissen aufgrund deiner Schilderungen Annahmen darüber, was die Lösung sonst noch so können muss, außer das Problem zu lösen. Dann poste ich die Lösung. Dann ergeben sich neue Probleme, weil meine Lösung nicht genau auf dein Problem passt, weil meine Annahmen nicht die richtigen waren, weil mir genaue Informationen gefehlt haben.
Kurzum: Wir drehen uns hier unnötig oft im Kreis. Vollkommen unproblematisch wäre es, wenn du ein Beispiel online stellen könntest (da du auf PHP angewiesen bist, nimm z.B. Freehoster wie [bplaced](http://www.bplaced.net/)), an dem wir die einzelnen auftauchenden Probleme abarbeiten könnten. Dann könnte ich dir genau sagen, wo du was hinschreiben musst und dann wäre mir - weil ichs vor mir habe - auch viel klarer, wo das Problem liegt. Ich predige schon lange das Einbringen von live-Beispielen als ersten Schritt auf dem Weg zur Lösung bei entsprechend komplizierten Problemen...
Grüße,
RIDER
--
Camping\_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
sorry
ich habe die onchange="radioSelect(this,true) auch in die input-tags eingebaut
sorry war mein Fehler.
alles ist nun draussen
diesen aufruf gibt es nun an insgesamt 3 Stellen
2 mal an den zwei radio-bottons
<input type="radio" name="radio'.$week.'" id="v'.$week.'" onchange="radioSelect(this,true);"/>
der name ist also name="radio'.$week.'" /in ersten zeile also "radio1"
so siehts auch beim zweiten radio-button aus
oben wo das mit dem ajax steht was also die seite neu laden wird (quatsch nicht die seite sondern nur die zeile)
sieht es so aus
xmlhttp.open("GET","pages/phecSettings.php?gtid="+testTypeId+">g="+testTypeGroup+"&tid="+tabrid+"&test="+test+"&week="+week,true);
var myWindow = window.open("", "MsgWindow", "width=200, height=100");
myWindow.document.write("<p>vor send = ok</p>");
xmlhttp.send();
var tempweek = "radio"+week;
document.getElementsByName(tempweek)[0].checked = true;
document.getElementsByName(tempweek)[0].checked = false;
radioSelect(document.getElementsByName(tempweek)[0],false);
var myWindow = window.open("", "MsgWindow", "width=200, height=100");
myWindow.document.write("<p>nach send = ok</p>");
die neue Zeile wird sauber geladen... ich sehe auch wo ich bin da ich mir das ausgeben lasse
der arbeitet wohl auch das javascript ab
aber es passiert nichts
hier die javascript function radioSelect
function radioSelect (radio,triggerAll) {
if (radio.checked)
{
disabled=false;
} else {
disabled=true;
}
//Das folgende brauchst du weil -> Kommentar **
if (triggerAll) {
var elms = document.getElementsByName(this.name);
for (var i = 0; i < elms.length; i++)
{
radioSelect(elms[i],false);
}
}
}
am code habe ich gar nichts geändert... ist so ... kannst mir glauben
Bitte ersuche das noch mit mir zu lösen ich bekomme hier fast die Kriese
Grüße Jürgen
das bringt er mir in der console
TypeError: Cannot set property 'checked' of undefined
Aloha ;)
das bringt er mir in der console
TypeError: Cannot set property 'checked' of undefined
Na, dann ist schon klar, wenn nix passiert. Kritische JavaScript-Fehler (wie dieser) halten die Ausführung des JS an (zumindest teilweise).
Also, warum ist das so: Du setzt irgendwo eine Eigenschaft checked, die nicht existiert, weil das Element nicht existiert (undefined) - wo, das hättest du auch selbst rausgefunden, die Konsole gibt dir den Ort des Fehlers ja aus. Ich schaue in meine Glaskugel und vermute, es ist diese Zeile:
document.getElementsByName(tempweek)[0].checked
Nun, warum ist das undefined? Schon mal überprüft, was in tempweek drinsteht (z.B. durch console.log(tempweek))? Oder mal probiert, document.getElementsByName(tempweek) ausgeben zu lassen (console.log(...))? Vielleicht gibt es ja gar keine Radio-Boxen mit name "radio"+week... Das ist zumindest, was die Fehlermeldung sagt (sofern sie sich auf diese Zeile bezieht, was ich nicht weiß).
if (radio.checked)
{
disabled=false;
} else {
disabled=true;
}
Du möchtest also die lokale Variable disabled auf true oder false setzen? Ist das so? Oder möchtest du nicht eher Eigenschaften der Elemente
document.getElementById('pVMin'+radio.name.substring(5)).disabled
document.getElementById('pVMax'+radio.name.substring(5)).disabled
setzen (oder so ähnlich)?
am code habe ich gar nichts geändert... ist so ... kannst mir glauben
Vielleicht ist das das Problem. In meinem Code waren explizit Stellen drin, die zu ersetzen waren. Oder wie erklärst du dir das ... in
radio...disabled=false;
Ich helfe dir gern. Erwarte aber nicht, dass dir das das Denken abnimmt. Wenn die Aufgabe deine Fähigkeiten maßlos übersteigt, solltest du dir überlegen, ob das tatsächlich das richtige ist.
Davon, dass es echt anstrengend ist, ein Posting ohne Punkt, Komma und Großbuchstaben zu lesen und dann noch zu verstehen, und dass du schon wieder nur Codeschnipsel und kein Live-Beispiel lieferst, will ich gar nicht reden. Wie oft noch?
Grüße,
RIDER
Aloha ;)
Also, warum ist das so: Du setzt irgendwo eine Eigenschaft checked, die nicht existiert, weil das Element nicht existiert (undefined) - wo, das hättest du auch selbst rausgefunden,
ich? so weit bin ich noch nicht
die konsole sagte mir was von einer zeile ja
aber meine seite wird auf der index.php included und da weiss ich nicht ob er mir das genau sagt auf der konsole
bei mir steht nur das in der Konsole... ausser ich muss bei der console noch was dazuschalten das ich mehr sehe,
sorry das weiss ich nicht wie..
Uncaught TypeError: Cannot set property 'checked' of undefinedindex.php?id=1:101 phecLoadFormindex.php?id=1:340 onclick
klar ich sehe das was mit dem Aufruf bzw. der function phecLoadForm nicht stimmt
aber mehr auch nicht
document.getElementsByName(tempweek)[0].checked
Nun, warum ist das undefined? Schon mal überprüft, was in tempweek drinsteht
ja... da steht sauber drin was drinstehen muss "radio1"
habe ich mir schon via alert ausgeben lassen... war aber eh klar, da hier die erste Zeile geladen wird und ich übergebe auch ich eine feste "1" die an die function gesendet wird
in der function setze ich den string mit "var tempweek = "radio"+week;" zusammen.
da ich eh immer den name="radio'.$week.'" habe
(z.B. durch console.log(tempweek))? Oder mal probiert, document.getElementsByName(tempweek)
da kommt ein mist [ObjectNodelList] oder so öhnlich
ausgeben zu lassen (console.log(...))?
ich muss mal schaun wie das geht
habe hier den firefox und chrome
Vielleicht gibt es ja gar keine Radio-Boxen mit name "radio"+week...
die gibt es zu 100%
die radios werden ja auch ausgegeben und gerade eben habe ich ein echo "aha hier sind sie"; reingeschrieben, auch das hat er gebracht
und jetzt kommt das kuriose...
natürlich schaue ich mir auch mal den Quelltext an...
da kommt gar nichts
da kommt auch nicht das was ich im Browser sehe... er bringt mir nur den html-head den normalen body aber alles was meine registerkarten betrifft also die div-container die ja in
<ul><li></li><ul> eingeschlossen sind kommen nicht... mmmhhh?
if (radio.checked)
{
disabled=false;
} else {
disabled=true;
}Du möchtest also die lokale Variable disabled auf true oder false setzen? Ist das so? Oder möchtest du nicht eher Eigenschaften der Elemente
das was hier steht, das steht in der function die ich von dir habe... ich hoffe ich habe sie nicht falsch abgeschrieben oder an die falsche stelle gesetzt oder sonst einen mist gemacht
document.getElementById('pVMin'+radio.name.substring(5)).disabled
document.getElementById('pVMax'+radio.name.substring(5)).disabled
>
> setzen (oder so ähnlich)?
ich weiss nicht was der string von dir bedeutet... aber was ich will weisst du doch... ich will die felder sperren oder eben bei klick auf den radio die felder sperren sperren
> Vielleicht ist das das Problem. In meinem Code waren explizit Stellen drin, die zu ersetzen waren. Oder wie erklärst du dir das ... in
>
> > radio...disabled=false;
genau... das traute ich mich schon gar nicht mehr zu fragen
woher soll ich wissen was da rein kommt wenn ich das wüsste dann hätte ich wahrscheinlich meine seite hier schon längst fertig
ich sagte doch schon das ich einen etwas größeren schupser benötige alös vielleicht 1000 andere hier.
sorry sorry und nochmals sorry ich mach das nicht absichtlich!!!
> Davon, dass es echt anstrengend ist, ein Posting ohne Punkt, Komma und Großbuchstaben zu lesen und dann noch zu verstehen, und dass du schon wieder nur Codeschnipsel und kein Live-Beispiel lieferst, will ich gar nicht reden. Wie oft noch?
ich kann die Seite leider nicht live stellen sorry...
das hätte ich schon längst gemacht...
Bitte helf mir halt diesen Mist hier zu lösen..
Grüße Jürgen
Aloha ;)
bei mir steht nur das in der Konsole... ausser ich muss bei der console noch was dazuschalten das ich mehr sehe,
sorry das weiss ich nicht wie..
Inzwischen hasts ja rausgefunden.
(z.B. durch console.log(tempweek))? Oder mal probiert, document.getElementsByName(tempweek)
da kommt ein mist [ObjectNodelList] oder so öhnlich
ausgeben zu lassen (console.log(...))?
ich muss mal schaun wie das geht
habe hier den firefox und chrome
Naja, so wie geschrieben. Statt alert(document.getElementsByName(tempweek)); (da kommt tatsächlich immer nur [ObjectNodeList]) einfach console.log(document.getElementsByName(tempweek)); (denn dann wird die NodeList so wie sie ist in die Konsole gepostet und du kannst dich durch ihre Eigenschaften und Elemente klicken).
natürlich schaue ich mir auch mal den Quelltext an...
da kommt gar nichts
da kommt auch nicht das was ich im Browser sehe... er bringt mir nur den html-head den normalen body aber alles was meine registerkarten betrifft also die div-container die ja in
<ul><li></li><ul> eingeschlossen sind kommen nicht... mmmhhh?
Deshalb ja die so oft von mir erwähnten und gelobten Entwicklertools. Die hatte ich dir persönlich schon vor 3 Tagen empfohlen.
if (radio.checked)
{
disabled=false;
} else {
disabled=true;
}
document.getElementById('pVMin'+radio.name.substring(5)).disabled
document.getElementById('pVMax'+radio.name.substring(5)).disabled
>
> ich weiss nicht was der string von dir bedeutet... aber was ich will weisst du doch... ich will die felder sperren oder eben bei klick auf den radio die felder sperren sperren
Ja, ich weiß was du willst. Der leicht sarkastische Unterton ist dem geschuldet, dass du versuchen solltest nicht nur abzupinseln (und dann auch noch falsch), sondern stattdessen zu verstehen. Ich rate mal wieder die restlichen Rahmenbedingungen: Du willst bei Auswahl des "radio1" die Inputfelder mit id "pVMin1" und "pVMax1" entsperren und bei Abwahl sperren. Richtig? Genau diese wählen meine beiden Codeschnipsel aus (die Zahl der Woche ist im name der Radio-Buttons ab Zeichenstelle 5), folgendermaßen baust du sie dann in die Funktion ein (und das gehört zu den Dingen, die ich dir eigentlich nicht extra vorkauen müssen sollte):
~~~javascript
if (radio.checked)
{
document.getElementById('pVMin'+radio.name.substring(5)).disabled = false;
document.getElementById('pVMax'+radio.name.substring(5)).disabled = false;
} else {
document.getElementById('pVMin'+radio.name.substring(5)).disabled = false;
document.getElementById('pVMax'+radio.name.substring(5)).disabled = false;
}
woher soll ich wissen was da rein kommt wenn ich das wüsste dann hätte ich wahrscheinlich meine seite hier schon längst fertig
Naja, ich dachte die Notation ... für "hier fehlt was" sei international verständlich ;)
sorry sorry und nochmals sorry ich mach das nicht absichtlich!!!
Ja, ich glaubs dir ja. Anstrengend ist's manchmal trotzdem. Und vielleicht auch nicht unbedingt nötig. Vieles wäre durch logisches Denken und kurze Recherche vermeidbar oder verständlich.
ich kann die Seite leider nicht live stellen sorry...
Wieso das denn? Hier Codeschnipsel posten kannst du doch auch. Natürlich verlangt niemand von dir, dass du irgendwelche sensiblen Daten verfügbar machst. Wenn du die Seite nicht live stellen kannst, dann stell doch einfach was live, was genauso funktioniert. Der Knackpunkt ist einfach, mal was live zu haben, damit alle Beteiligten sehen um was es geht. Ansonsten - das sagte ich schon - ist hier alles nur munteres Rätselraten.
Stell dir vor, es gäbe noch einen elementaren Fehler. Einen, den du nicht bemerkst. Der dir aber nachher die gesamte Funktionalität verhaut. Ich kann es nicht beurteilen, denn das System im Ganzen hab ich noch nie gesehen. DAS Risiko, weiter meine und deine Zeit zu verschwenden, trägst alleine du.
Grüße,
RIDER
hallo
also ich muss mal a der Stelle doch was loswerden und das kommt von Herzen.
Auch wenn ich Dich ab und an gerne in der Luft zerreissen möchte da es für Dich bestimmt ein Klacks wäre und es mir bestimmt auch weiterhelfen würde (ich sagte ja, ich brauche die beispiele anhand derer baue ich dann später mein Lernen auf... ist bei mir so.. und so kapier ich es am schnellsten, das war bei php so und bei mysql auch und auf der Linux konsole auch)
Muss ich doch was sagen.
Du hast echt Geduld mit mir, dafür gehört Dir schon ein dicker Orden verpasst.
Danke !!! und das ist ehrlich gemeint.
Hier aber weiter...
ich werde das auch testen was Du gerade gepostet hast... ich wäre da nie dahinter gekommen... ist so... nur wenn ich ein funktinierendes beispiel habe anhand dieser "Komplexität" dann kann ich bestimmte dinge besser nachvollziehen. Bis dahin drehe ich mich im Kreis und lerne gar nichts dazu...
ist bei anderen bestimmt anders.
Hier aber das was ich in der Konsole des Inspectors sehe
<input id="v1" type="radio" checked="checked" onchange="radioSelect(this,true);" name="radio1"></input>
<input id="b1" type="radio" checked="" onchange="radioSelect(this,true);" name="radio1"></input>
lasse ich mir aus der Funktion dagegen folgende Werte ausgeben
var tempweek = "radio"+week;
alert (tempweek); // hier steht radio1
alert (document.getElementsByName(tempweek)[0]); //hier kommt undefined
alert (document.getElementsByName(tempweek)[1]); //hier kommt undefined
keine Ahnung wieso.
ich probiere jetzt mal noch deinen code und schau mir Deine tipps zum Inspector an um zu sehen wo es noch klemmen könnte
ich stochere dabei aber nur rum... da es für mich nicht klar ist wieso
document.getElementsByName(tempweek)[0].checked = true; nicht gehen sollte wenn der radio1 button existiert
Grüße Jürgen
ich dachte der radio1 wäre ein array und wäre radio1[0] oder radio1[1]
Aloha ;)
Du hast echt Geduld mit mir, dafür gehört Dir schon ein dicker Orden verpasst.
Danke !!! und das ist ehrlich gemeint.
Danke für das Lob, ich erkenne das an und es entschädigt mich ein wenig ;)
Hier aber das was ich in der Konsole des Inspectors sehe
<input id="v1" type="radio" checked="checked" onchange="radioSelect(this,true);" name="radio1"></input>
<input id="b1" type="radio" checked="" onchange="radioSelect(this,true);" name="radio1"></input>
>
> lasse ich mir aus der Funktion dagegen folgende Werte ausgeben
>
> var tempweek = "radio"+week;
> alert (tempweek); // hier steht radio1
> alert (document.getElementsByName(tempweek)[0]); //hier kommt undefined
> alert (document.getElementsByName(tempweek)[1]); //hier kommt undefined
>
> keine Ahnung wieso.
>
> ich probiere jetzt mal noch deinen code und schau mir Deine tipps zum Inspector an um zu sehen wo es noch klemmen könnte
>
> ich stochere dabei aber nur rum... da es für mich nicht klar ist wieso
> document.getElementsByName(tempweek)[0].checked = true; nicht gehen sollte wenn der radio1 button existiert
Nachtigall, ick hör dir trapsen...
Eher beiläufig habe ich über den neuen von dir aufgemachten Thread mitbekommen, dass du auf deiner Seite einen iframe einsetzt. Jetzt ist es aber so: document.getElementsByName sucht das document nach Elementen mit bestimmten Name ab. Der Inhalt des iframe ist aber nicht Teil des document, sondern besitzt ein eigenständiges document (nämlich `document.getElementsByTagName('iframe')[0].contentWindow.document`{:.language-javascript}) . Kann es vielleicht sein, dass deine Funktion und die Ausführung außerhalb des Iframe notiert wird, die entsprechenden Elemente aber im iframe notiert sind?
Grüße,
RIDER
P.S.: Wenn das stimmt, wäre meine These mal wieder bewiesen. Ohne Live-Beispiel kann ich nur in der trüben Suppe herumstochern... Und ja, ich weiß, du hast es schon probiert. Du solltest es aber weiter probieren. Es ist wahrscheinlicher, dass irgendein Fehler in deinem Code ist, der das Funktionieren bei bplaced verhindert, als dass was bei bplaced ein Problem darstellt. Und dann ist es ja eigentlich gut, wenn du in diesem Zuge Fehler ausmerzen kannst.
--
Camping\_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
Hallo
ich schwöre ich setze keine iframes (zumindest nicht als direkten html-Befehl) ein
aaaber... was ich vermute.
da ich die Registerkarte bzw. was dann in den <li></li> steht mit <div> container dazulade interpretiert der Browser dies als iframe...
kann das sein?
deswegen gibt mir dann wohl auch die console das Ganze als iframe aus
reicht da tatsächlcih dann der Zugriff auf das "name" EElement des radio-bottons via
document.getElementsByTagName('iframe')[0].contentWindow.document
) .
denn in dieser Anweisung sehe ich nirgends das auch auf das getElementsByName zugegriffen wird
Kann es vielleicht sein, dass deine Funktion und die Ausführung außerhalb des Iframe notiert wird, die entsprechenden Elemente aber im iframe notiert sind?
mit Sicherheit wird es so sein... denn das er gar nichts findet obwohl es da ist mmmhh???
wenn ich den inspector aufrufe...
sorry .. kommando zurück
schau bitte was mir der inspector zeigt
der iframe kommt nach dem </body> .. ich glaub das hat nur was mit dem firefox zu tun oder?
</body>
<iframe id="abs-top-frame" frameborder="0" allowtransparency="true" style="position: fixed; z-index: 2147483647; overflow: hidden; top:…er: 0px none; background-color: transparent; display: block;" src="resource://firefox.abs.avira.com/html/top.html?1419109956462#minimized">
#document
</iframe>
Grüße,
RIDER
ich wollte das mit pblaced erstmal wegschieben... mich jetzt um die Sessions zu kümmern und um die links die dort falsch gesetzt werden... phuuu.. ich wollte erstmal diese "kleinigkeit" erledigen so dass diese seite hier fertig ist.. Kleinigkeit deswegen da ich glaub das es nur an etwas ganz banalem liegt
Grüße Jürgen
Aloha ;)
ich schwöre ich setze keine iframes (zumindest nicht als direkten html-Befehl) ein
aaaber... was ich vermute.
da ich die Registerkarte bzw. was dann in den <li></li> steht mit <div> container dazulade interpretiert der Browser dies als iframe...
kann das sein?deswegen gibt mir dann wohl auch die console das Ganze als iframe aus
Und ich schwöre dir: Wenn die Entwicklerwerkzeuge sagen, dass da ein iframe ist, dann ist da auch ein iframe. Dann solltest du zunächst mal rausfinden wo der herkommt (Anm.: Hast du ja schon in dem Fall). Und eins ist sicher wie das Amen in der Kirche: Dass Browser iframes als iframes interpretieren und divs als divs. Und kein Mischmasch davon.
reicht da tatsächlcih dann der Zugriff auf das "name" EElement des radio-bottons via
document.getElementsByTagName('iframe')[0].contentWindow.document
) .denn in dieser Anweisung sehe ich nirgends das auch auf das getElementsByName zugegriffen wird
Nein, natürlich nicht. Hättest du mein Posting aufmerksam gelesen, wüsstest du, dass obige Anweisung auf das document im iframe zugreift. Dass du für dein Element noch zusätzlich hinterher ein getElementsByName brauchst, muss ich dir ja nicht vorbeten. Ich dachte du hättest inzwischen verstanden, dass es ohne eigenständiges Mitdenken nicht funktioniert hier.
Kann es vielleicht sein, dass deine Funktion und die Ausführung außerhalb des Iframe notiert wird, die entsprechenden Elemente aber im iframe notiert sind?
mit Sicherheit wird es so sein... denn das er gar nichts findet obwohl es da ist mmmhh???
wenn ich den inspector aufrufe...
sorry .. kommando zurück
schau bitte was mir der inspector zeigt
der iframe kommt nach dem </body> .. ich glaub das hat nur was mit dem firefox zu tun oder?
</body>
<iframe id="abs-top-frame" frameborder="0" allowtransparency="true" style="position: fixed; z-index: 2147483647; overflow: hidden; top:…er: 0px none; background-color: transparent; display: block;" src="resource://firefox.abs.avira.com/html/top.html?1419109956462#minimized">#document
</iframe>
Da gebe ich dir tatsächlich recht, das scheint nicht von dir zu stammen, sondern vom Virenscanner (Avira) in Firefox integriert worden zu sein. Tja, dann ist das eben doch nicht der Grund. Wie gesagt - ohne Live-Beispiel werden wir nicht weiterkommen.
> ich wollte das mit pblaced erstmal wegschieben... mich jetzt um die Sessions zu kümmern und um die links die dort falsch gesetzt werden... phuuu.. ich wollte erstmal diese "kleinigkeit" erledigen so dass diese seite hier fertig ist.. Kleinigkeit deswegen da ich glaub das es nur an etwas ganz banalem liegt
Dann kümmer dich um was du willst wann du willst - aber verschon uns bitte, bis du wirklich Zeit hast, dich auf das hier präsentierte Problem einzulassen. Und ja, natürlich kanns sein, dass das an was banalem liegt. Trotzdem werden wir es so nicht finden.
Grüße,
RIDER
--
Camping\_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
Hallo,
mittlerweile geht es zumindest bei der ersten Zeile :)
Bei der zweiten Zeile bringt mir die Console
Uncaught TypeError: Cannot set property 'disabled' of undefinedindex.php?id=1:192 phecInputFieldOnOffindex.php?id=1:1 onclick
in der Zeile steht das
document.forms['formphec'].elements[field[i]].disabled = wert == 1
;
"formphec" ist der <form name="formphec" action="#" >
field[i] steht in einer Schleife in der die Felder durchlaufen werden.
Diese habe ich mir mit alert ausgeben lassen. Die Namen stimmen und die Felder gibt es auch.
ich hatte noch probiert mit alert(document.forms['formphec'].name); zu überprüfen ob er das formular findet... da kommt einfach der Name formphec.
Wahrscheinlich totaler nonsens von mir diese Ausgabe.
Weiss jemand wie ich dem fehler auf die Spur kommen könnte?
was ich mir am besten ausgeben lassen sollte ?
Bitte mit Befehlszeile dazu, wenn möglich ... Danke!
Grüße Jürgen
Hallo,
ich glaub das Problem entdeckt zu haben
Da ich Zeilen nachlade habe ich den "addnewrow-button" in einem <div> Container der mit einer id versehen ist
in diesem Container eingeschlossen habe ich auch das </form>
Bei jedem Nachladen der Zeile, tauscht er mir sauber diesen Conaitener aus, hängt seine neuen Zeilen dran, mit einem neuen addnewrow-button aber das </form> taucht er nicht mit aus
somit wird das Formular oben schon nach der ersten Zeile geschlossen und bleibt geschlossen.
Gibt es mit <form> tags Probleme so dass diese nicht berücksichtigt werden?
Grüße Jürgen
Hallo,
ich habe mir gerade mal die werte ausgeben lassen
als irgend was pass da nicht
hier die function
function radioSelect (radio,triggerAll) {
alert("das ist radio aus function==>"+radio); // hier gibt er [object htmlInputElement ]
alert("das ist triggerAll aus function==>"+triggerAll); // hier true
// wenn radio aber [object htmlInputElement ] ist dann der string unten nicht passen oder?
if (radio.checked)
{ da das| meine ich
document.getElementById('pVMin'+radio.name.substring(5)).disabled = false;
document.getElementById('pVMax'+radio.name.substring(5)).disabled = false;
} else {
document.getElementById('pVMin'+radio.name.substring(5)).disabled = false;
document.getElementById('pVMax'+radio.name.substring(5)).disabled = false;
}
//Das folgende brauchst du weil -> Kommentar **
if (triggerAll) {
var elms = document.getElementsByName(this.name);
for (var i = 0; i < elms.length; i++)
{
radioSelect(elms[i],false);
}
}
}
ich dachte der onchange="radioSelect(this,true) der im <input radio.... steht bringt mir die id bzw. den name= ? this ist doch ei zeiger auf den Wert oder?
wieso bringt er dann [object htmlInputElement ]
Grüße Jürgen
Hallo selfmade,
function radioSelect (radio,triggerAll) {
alert("das ist radio aus function==>"+radio); // hier gibt er [object htmlInputElement ]
alert("das ist triggerAll aus function==>"+triggerAll); // hier true
was liefert alert(radio.name); und alert(radio.checked); ?
Gruß, Jürgen
Aloha ;)
alert("das ist radio aus function==>"+radio); // hier gibt er [object htmlInputElement ]
Hm. Okay. Ich hatte dir aber auch schon öfter gesagt, dass es (u.U.) eine verhältnismäßig ungünstige Idee ist, Kontrollausgaben mit alert zu tätigen, und dass du besser console.log benutzt (dessen Verwendung ich dir auch schon in mindestens zwei Beispielen direkt gezeigt habe), da du in der Konsole dann DEUTLICH mehr siehst, als nur [object htmlInputElement]. Aber seis drum, tut ja hier nichts zur Sache.
ich dachte der onchange="radioSelect(this,true) der im <input radio.... steht bringt mir die id bzw. den name= ? this ist doch ei zeiger auf den Wert oder?
wieso bringt er dann [object htmlInputElement ]
radio
ist das, was der Funktion als Aufruf per onchange mit dem Wert this
übergeben wird - und this
zeigt in einer Funktion, die auf einen EventHandler hört, auf das srcElement des Events - also kurz gesagt auf das Element selbst. Mit anderen Worten: radio ist der DOM-node deines Radio-Buttons, der gerade ausgewählt wurde. Seine id ist radio.id und sein name ist radio.name - vergleiche die Übergabewerte in der Schleife, da übergeben wir auch nicht id oder name, sondern die Elemente selbst...
Das passt schon alles soweit ;)
Glaub mir - ich verbring mit diesem Thread so schon genug Zeit - ich würde dir keine ungetesteten Codefragmente vorwerfen und damit noch mehr Verwirrung erzeugen als sowieso schon herrscht (außer ich sags ausdrücklich dazu).
Grüße,
RIDER
Aloha ;)
Nochmal was. Ich schieß hier nur ins Blaue. Aber hier würde mich fast nichts mehr wundern..
// wenn radio aber [object htmlInputElement ] ist dann der string unten nicht passen oder?
if (radio.checked)
{ da das| meine ich
document.getElementById('pVMin'+radio.name.substring(5)).disabled = false;
Du sagst hier: der string unten. Ich will nur sichergehen. Dir ist klar, dass radio.name.substring(5) ein String ist. Und zwar der Substring ab der 5. Stelle der Eigenschaft name des Elements radio. Nicht etwa der String aus den Werten von radio, name und substring.
In anderen Worten: Dir ist klar und vollkommen bewusst, dass in JavaScript der '.' nicht Strings verknüpft (wie in PHP), sondern der Operator (Property Accessor Operator) ist, der von einem Objekt zu seinem Memberobjekt weist? Und dass Strings in JavaScript nur durch '+' verknüpft werden.
Wenn ja ist ja alles okay. Wie gesagt - ich will nur sichergehen. Denn wenn dir das klar ist, verstehe ich nicht, wie du drauf kommst, dass radio schon der String mit dem name sein könnte, da Strings keine Unterobjekte besitzen. Nie.
Grüße,
RIDER
Da Martin (richtigerweise) deinen Thread gesperrt hatte, bevor meine Antwort durchkam, kriegst du sie hier. Viel Spaß damit.
Aloha ;)
Nicht. dein. Ernst. Noch ein Thread???
Uncaught TypeError: Cannot set property 'disabled' of undefinedindex.php?id=1:192 phecInputFieldOnOffindex.php?id=1:1 onclick
Da steht bestimmt Uncaught TypeError: Cannot set property 'disabled' of undefined index.php?id=1:192
Abstände sind nicht da, um vernachlässigt zu werden.
> document.forms['formphec'].elements[field[i]].disabled = wert == 1;
Und du wunderst dich? [elements](http://wiki.selfhtml.org/wiki/JavaScript/Objekte/DOM/document/forms/elements) ist ein Array und seine Indizes sind Zahlen, ganz bestimmt keine field[i].
> "formphec" ist der <form name="formphec" action="#" >
>
> field[i] steht in einer Schleife in der die Felder durchlaufen werden.
>
> Diese habe ich mir mit alert ausgeben lassen. Die Namen stimmen und die Felder gibt es auch.
Und trotzdem hast du offenbar versäumt, document.forms['formphec'].elements[field[i]] abzufragen. Das hätte dir und uns diesen Thread vermutlich erspart - vorausgesetzt du wärst in der Lage gewesen, Google zu fragen, wie elements funktioniert.
> Bitte mit Befehlszeile dazu, wenn möglich ... Danke!
Wie war das mit gethtml und selfhtml? Von daher nein, nicht möglich.
Grüße,
RIDER
--
Camping\_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
Hallo,
Nicht. dein. Ernst. Noch ein Thread???
das dachte ich so ähnlich auch. *seufz*
document.forms['formphec'].elements[field[i]].disabled = wert == 1;
Und du wunderst dich? elements ist ein Array und seine Indizes sind Zahlen, ganz bestimmt keine field[i].
Ganz so einfach ist es nicht. Man kann elements[] wahlweise numerisch indizieren, oder aber mit den Namen der Formularelemente (deren name-Attribut). Ist das zweite Formularelement also beispielsweise ein
<input type="hidden" name="foo" value="bar">
dann kann man es entweder über f.elements[1] oder f.elements['foo'] oder f.foo adressieren, wenn f eine Referenz auf das form-Elementobjekt ist. Alle drei Varianten sind erlaubt und gleichwertig.
Bitte mit Befehlszeile dazu, wenn möglich ... Danke!
Wie war das mit gethtml und selfhtml? Von daher nein, nicht möglich.
;-)
Ciao,
Martin
Hi,
if (radio.checked)
wozu diese Fallunterscheidung?
{ da das| meine ich
document.getElementById('pVMin'+radio.name.substring(5)).disabled = false;
document.getElementById('pVMax'+radio.name.substring(5)).disabled = false;
} else {
document.getElementById('pVMin'+radio.name.substring(5)).disabled = false;
document.getElementById('pVMax'+radio.name.substring(5)).disabled = false;
}
Du machst in beiden Fällen dasselbe. Also kann man das ganze if-else-Konstrukt auf
document.getElementById('pVMin'+radio.name.substring(5)).disabled = false;
document.getElementById('pVMax'+radio.name.substring(5)).disabled = false;
reduzieren.
cu,
Andreas
Aloha ;)
Ja, den Bock hab wohl ich geschossen vor lauter vorgekaue -.- Sollte natürlich einmal true und einmal false sein (umgekehrt zu radio.checked).
Oder noch einfacher - angelehnt an deine Antwort:
document.getElementById('pVMin'+radio.name.substring(5)).disabled = !radio.checked;
document.getElementById('pVMax'+radio.name.substring(5)).disabled = !radio.checked;
Grüße,
RIDER
Hi,
die konsole sagte mir was von einer zeile ja
aber meine seite wird auf der index.php included und da weiss ich nicht ob er mir das genau sagt auf der konsole
Beschäftige Dich mit den Grundlagen!!!
PHP wird auf dem Server ausgeführt, der Browser, der Javascript ausführt und Dir was in die Konsole schreibt, weiß nichts davon, ob die Seite per PHP, Java, Urglwurgl oder sonst was zusammengesetzt wird.
Schau Dir im Browser im Quelltext die genannte Zeile an.
Und dann such in Deinem Code, wo genau diese Zeile erzeugt wird.
cu,
Andreas
so jetzt habe ich mal die console etwas studiert
hier die Ausgaben (wie du schon vermutet hast
Uncaught TypeError: Cannot set property 'checked' of undefined
document.getElementsByName(tempweek)[0].checked = true;
dann bringt er noch das...
der verweis auf die zeile bleibt aber dann leer... keine Ahnung warum
Failed to load resource: net::ERR_CACHE_MISS
Grüße Jürgen
Aloha ;)
Failed to load resource: net::ERR_CACHE_MISS
Diese zweite Fehlermeldung sollte unproblematisch sein - zumindest für das aktuelle Problem.
Grüße,
RIDER