Wert eines Textfeld an Funktion übergeben

slsb02

Grünschnabel
Hallo,

ich habe ein Problem PHP - Javascript:

Ich habe eine while Schleife, in der ich hidden Felder habe. Diese hidden felder, sollen mit PHP mit Text gefüllt werden, bis dahin kein Problem.
Jetzt möchte ich aber nach jedem Hiddenfeld ein Javascript Funktion mit dem Inhalt des Textfeldes ausführen. Und da komme ich nicht weiter, kann mir eventuell jemand einen kleinen Schupser geben. Ich muss dazu sagen, dass ich Javascript nicht kann.

So sieht es bei mir aus:
Code:
tep_draw_hidden_field(number_hidden[' . $i . ']', $i);
?>  
<script language="javascript">alert(document.new_number.['number_hidden'[<?php echo $i; ?>]'].value);</script>

Bitte helft mir :-)

Liebe Grüße aus Berlin
 
Das Prob wird sein, dass du das document-Object zu dem Zeitpunkt deiner Anfrage noch nicht existiert! Aldieweil das erst mit fertiger Auslieferung - also wenn die Seite fertig aufgebaut ist - dargestellt werden kann.

Insofern solltest du die Werte erst am nach dem Laden machen. Hierzu gibts es zwei Möglichkeiten (wobei zweiter deutlich vorzuziehen ist ...)

<script>var methode = function() { ..... } </script

1)
<body onLoad="methode()"> ... <body>
2)
in den script-tag noch folgendes rein
window.onload = methode; //-> wichtig ohne ()

beides ruft nach dem Aufbau der seite die Funktion methode() auf und hier kannst du dann auf document zugreifen!

Verständlich?

Dirk
 
Hallo Dirk,

vielen Dank, für die schnelle Antwort. Ich denke, dass ich 2.te verwenden möchte aber wenn ich nun alles soweit drin habe:

Code:
<script language="javascript">window.onload = alert(document.new_number.['number'[0]].value);</script>

sagt mir der Browser, Bezeichner erwartet. "number" ist in diesem Fall, ein array...

Danke und Grüße
 
:)
Okay - dann schnell einen Grundkurs!

Also window.onload wird ausgelöst, wenn der body geladen ist. Normalerweise macht der dann nix, es sei denn, man überschreibt diese Methode (nix machen). Das funtioniert im allgemeinen in JS, indem ich die funktion, die in JS durch eine variable [ var methode = fucntion() { ... } oder einfach function mehtode() { ... } ] dargestellt wird an window.onload = methode übergebe. Als macht der nun das was mehthode vorbgibt!

Wenn der also ein echo ausgeben soll, kannste schreiben:
function(){ alert('da bin ich'); }
ggfs machste da ne variable draus mit var methode = function() .... - musste aber nicht!

So und nun das eben an den evant window.onload kleben also
window.onload = funciton(){ alert('da bin ich'); }; oder window.onload = methode;

So weit so gut, oder

Wenn du nun den wert eines elementes im document lesen willst, machste das via document.getElementById(elName).value - also für dich document.getElementById('number_XXX').value.

Um das ganze dann dymanisch mit php zusammenzubringen, musst du nicht nur die hidden-felder, sondern auch die Anweisunden in der methode() - Funktion mit valiedem JS-Code ausgeben.

Du kannst dir natürlich über form.elemts.length und form.elements[ i ] alle elemente zurück geben lasse und denn aufruf dyamisch am client erledigen lassen ... aber probier erst mal die erste Variante ;)

So - wieder was zumProbieren - btw, ich hab das hier on fly reingeschrieben, also nicht getestet, wenn also mal ein Komma fehlt .. ausprobieren

Dirk
 
Hallo Dirk,

vielen Dank, für die schnelle und ausführlich Erklärung, habe ich sogar verstanden.
Es funktioniert nun auch schon fast so, wie es soll.
Ich habe jetzt nur noch ein kleines Problem, mit der Function, die ich aufrufe.

Code:
<script language="javascript">window.onload = addOption(document.getElementById(['number[<?php echo $i; ?>]']).value, ['hall[<?php echo $i; ?>]'], 'new_number');</script>


Code:
function addOption(wert, auswahlfelder, formnamen){

  document.forms[formnamen].elements[auswahlfelder].length = 0;
  for(i=0;i < addhall[wert].length;i++){
    ins = new Option(addhall[wert][i],addhall[wert][i]);
    document.forms[formnamen].elements[auswahlfelder].options[document.forms[formnamen].elements[auswahlfelder].length] = ins;
  }
}

nun sagt er mir, dass document.forms[...].elements[...] null oder kein Object ist.

Ich nutze diese Funktion für die gleiche Auswahl, wenn ein Dropdown geändert wird.
Denn ich muss, wenn ich die Seite bearbeite, ja die Dropdowns, wieder richtig anzeigen.
Aber vermutlich, brauche ich noch eine 2te Function, die auf document angepasst ist, kann das sein?

Liebe Grüße
 
Okay slblsc .. :) , hier machste folgendes draus:

window.onload = addOption(document.getElementById('number<?php echo $i; ?>').value, 'hall<?php echo $i; ?>', 'new_number');

(was willste mit den ganzen eckigen Klammern :) )

und dann kannste du nur die variabel übergeben und addOption( ... ) ist keine Variable, sondern ein functions Aufruf, oder?! Deswegen:
var init = function() {
<?php
$i = 0;
while($i < ....) {
?>
addOption(document.getElementById('number<?= $i; ?>').value, 'hall<?= $i; ?>', 'new_number');
<?php
$i++;
}
?>
} // js function

window.onload = init;

.....

So, das sollte gehen! Hoffe ich ..
 
Danke Dirk,

aber jetzt sind wir glaube ich beide ein wenig an einader vorbei geschossen ;-)

Ich möchte folgendes machen:

Ich möchte mit:
Code:
<script language="javascript">window.onload = addOption(document.getElementById(['number[<?php echo $i; ?>]']).value, ['hall[<?php echo $i; ?>]'], 'new_number');</script>

diese function:
Code:
function addOption(wert, auswahlfelder, formnamen){

  document.forms[formnamen].elements[auswahlfelder].length = 0;
  for(i=0;i < addhall[wert].length;i++){
    ins = new Option(addhall[wert][i],addhall[wert][i]);
    document.forms[formnamen].elements[auswahlfelder].options[document.forms[formnamen].elements[auswahlfelder].length] = ins;
  }
}

aufrufen. Mache ich das, bekomme ich vom Browser, die Meldung:
document.forms[...].elements[...] null oder kein Object

Alles andere, funktionier bereits :-)...

Ich werde die eckigen Klammern entfernen, danke für den Tipp...

Liebe Grüße
slsb02
 
Zuletzt bearbeitet:
nönö - ich weiss shon was du willst, nur kannst du eben die addOption nur als variable an den window.onload event hängen. Also geht addOption() nicht nur maxiamal addOption (ohne klammern und Parameter) - das ist aber nicht das was du willst! Deswegen eine neue Funktion init() ohne Parameter und in der rufst du dann die addOption auf. die init kannste so an window.onload hängen!! - Ehm, da du der window.onload nur eine neue Funktion übergibst, bleiben die Parameter unberüht, also gibt window.onload den event weiter ganz genau müsste deien funcktion init also so aussehen -> init = fucntion(event) { addOption( .. deine Parameter .. ); } - das event kannste aber auch weg lassen, wenn das nicht ausgewertet werden soll .. ich hoffe wieder etwas heller .. sorry, irgendwie kann ich die zeile hier nicht umbrechen (und für die wilde rechtschreibung, aber schreiben geht so noch shlechte wie lesen ..) - ich hoffe du kannst das trotzdem lesen! // dirk
 

Neue Beiträge

Zurück