Toon posts:

[JS] variabel van new window naar opener.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Dag dag,

Vandaag ben ik maar weer eens aan het knutselen geslagen met javascript, ach je moet toch weer eens wat maken en dus wou ik een scriptje maken die met behulp van een popup gegevens in een 'form field' kan zetten. Nu heb ik het al werkend zonder dynamisch scriptje maar nu gebruik ik een nieuw stukje script dat bij het submitten de juiste velden aangeeft en dan haalt de functie (teminste dat zou die moeten) de gegevens uit het huidige formuliertje en zet deze in de 'opener' oftewel het scherm waaruit deze popup is geopend.

code!, ik heb 2 bestanden.

1. popback.html
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<script language="javascript">

function popUp()
{

    day = new Date();
    id = day.getTime();
    str = "page" + id + " = window.open('popback1.html', '" + id 
    + "', 'toolbar=0,scrollbars=1,location=0,statusbar=1,menubar=0,resizable=0');"
    eval(str);

}
</script>

HTML:
1
2
3
4
5
6
<form method="post" name="userinfo">
<input type="text" name="name"><br/>
<input type="text" name="number"> - <a href="#" 
onClick="javascript:popUp();">Select</a><br/>
<input type="submit" name="send" value="Verstuur">
</form>


en 2. popback1.html
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
<script language="javascript">
function returnVariable(formName, fieldName, fieldValue) 
{
//    self.opener.document.forms['userinfo'].rights.value = 
document.forms['rights'].elements['number'].value;

    self.opener.document.forms[formName].fieldName.value = 
    document.getElementById(fieldValue).value;
    window.close();
}
</script>

HTML:
1
2
3
4
5
<form name="cijfertjes">
<input type="text" name="cijfer">
<input type="submit" name="Verzend" 
onClick="javascript:returnVariable('userinfo', 'cijfer', 'cifjertjes.cijfer');">
</form>


de oude code om 'de' gegevens van het ene formulier naar het andere te transporeren was als volgt.

JavaScript:
1
2
3
4
5
6
function ClickClick() 
{
    self.opener.document.forms['userinfo'].rights.value = 
    document.forms['rights'].elements['number'].value;
    window.close();
}


daarin heb ik dus alle aansturingen (oftewel locaties waar de gegevens vandaankomen cq staan en waar ze heen moeten) staan. Nu wil ik dit dus variabel maken, zoals aangegeven in bovenstaande code alleen kan het volgens mijn script fieldValue niet vinden. Misschien logisch, misschien ook niet; maar ik weet niet waar de fout zit.

Iemand een idee?

enters ivm layout verneuking, moeten ze toch eens iets voor gaan bedenken (scrollbalk?)

  • André
  • Registratie: Maart 2002
  • Laatst online: 18-05 16:30

André

Analytics dude

Misschien door de typefout? cifjertjes

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:17

crisp

Devver

Pixelated

forms[formName].elements[fieldName]

en zet nooit javascript: in een eventhandler.

Ook je eval is vies en overbodig, gebruik een array of doe het zo:

JavaScript:
1
window['page'+id] = window.open(...);

Intentionally left blank


Verwijderd

Topicstarter
André schreef op 05 november 2004 @ 16:15:
Misschien door de typefout? cifjertjes
helaas niet, was het maar zo; die typefout had ik er namelijk ook al uitgehaald :P maar krijg gewoon de melding

code:
1
2
3
Error: document.getElementById(fieldValue) has no properties
Source File: popback1.html
Line: 6
crisp schreef op 05 november 2004 @ 16:18:
forms[formName].elements[fieldName]
dus geen document.getElementById?
en zet nooit javascript: in een eventhandler.
dus geen onClick? mag ik vragen waarom niet?
Ook je eval is vies en overbodig, gebruik een array of doe het zo:

JavaScript:
1
window['page'+id] = window.open(...);
owkee, ik zal eens kijken hoe het werkt :P

[ Voor 3% gewijzigd door Verwijderd op 05-11-2004 16:30 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:17

crisp

Devver

Pixelated

HTML:
1
2
3
<form id="myForm">
<input type="text" name="myField" />
</form>


in je popup:
JavaScript:
1
2
3
4
function doe(formName, fieldName, content)
{
  opener.document.forms[formName].elements[fieldName].value = content;
}


en dit is voudt:
HTML:
1
onclick="javascript:doe('myForm','myField','blaat')"

en dit is goed:
HTML:
1
onclick="doe('myForm','myField','blaat')"


capice? ;)

Intentionally left blank


Verwijderd

Topicstarter
:'( niet voor zeggen crisp....... maar owkee hap klare brokken zijn wel het lekkerste :9~

gelijk maar even een reply - na de edits etc -

nu heb ik de volgende bestanden

1. popback.html
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<script language="javascript">
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="popUp();">Select</a><br/>
<input type="submit" name="send" value="Verstuur">
</form>


en 2. popback1.html
code:
1
2
3
4
5
6
7
8
9
10
11
12
<script language="javascript">
function returnVariable(formName, fieldName, content)
{
  opener.document.forms[formName].elements[fieldName].value = content;
}
</script>


<form name="cijfertjes">
<input type="text" name="cijfer">
<input type="submit" name="Verzend" onclick="returnVariable('userinfo','cijfer', document.getElementById('cijfer'));">
</form>


je zou zeggen dat moet werken, maar in IE krijg ik [object] terug en bij Mozilla Firefox de melding Error: document.getElementById("cijfer") has no properties maar dat klopt niet. Ik heb het al met .value geprobeerd (en ook zonder zoals bovenstaand) maar krijg er niets uit.

ik weet het ik ben een javascript n00bie en zie misschien wat over het hoofd....

[ Voor 17% gewijzigd door Verwijderd op 05-11-2004 16:44 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:17

crisp

Devver

Pixelated

maak van document.getElementById('cijfer') eens this.form.elements['cijfer'].value
id != name

een onsubmit met een return false zou echter netter zijn

[ Voor 27% gewijzigd door crisp op 05-11-2004 16:47 ]

Intentionally left blank


  • Fatamorgana
  • Registratie: Augustus 2001
  • Laatst online: 21-07-2025

Fatamorgana

Fietsen is gezond.

ipv: <input type="text" name="cijfer">
moet je ook de id erbij doen: <input type="text" id="cijfer" name="cijfer">

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:17

crisp

Devver

Pixelated

Fatamorgana schreef op 05 november 2004 @ 16:47:
ipv: <input type="text" name="cijfer">
moet je ook de id erbij doen: <input type="text" id="cijfer" name="cijfer">

kan ook; dan kan je de hele form ook weglaten

[ Voor 4% gewijzigd door crisp op 05-11-2004 16:49 ]

Intentionally left blank


Verwijderd

Topicstarter
crisp: wat bedoel je met id != name? (id is niet gelijk aan name?) maar moet ik dat ook toevoegen? (zie het nut niet progremeer technisch gezien dan :P)

en een onsubmit met return false? why? :D (wil graag alles weten :X)

Fatamorgana: moet dat (id) of is dat alleen als je geen 'forms' gebruikt?

Yeah _O_ Yeah _O_ Yeah _O_ het werkt!!

[ Voor 29% gewijzigd door Verwijderd op 05-11-2004 16:55 ]


  • Fatamorgana
  • Registratie: Augustus 2001
  • Laatst online: 21-07-2025

Fatamorgana

Fietsen is gezond.

Volgens mij als je de functie getElementById() gebruikt, DAN moet die id er zijn, anders wordt ie niet gevonden.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:17

crisp

Devver

Pixelated

getElementById('cijfer') zoekt dus naar een element met id="cijfer" :)

Intentionally left blank


Verwijderd

Topicstarter
:D :X |:(, lache, bold zegt meer dan dat je zou verwachten |:(
Verwijderd schreef op 05 november 2004 @ 16:53:
en een onsubmit met return false? why? :D (wil graag alles weten :X)

[ Voor 62% gewijzigd door Verwijderd op 05-11-2004 16:59 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:17

crisp

Devver

Pixelated

ok, de les gaat verder :)

als je gebruik maakt van forms, dan is daar niets mis mee, maar een form moet een action hebben. Probleem is dan dat als je een submit doet de action ook uitgevoerd wordt; dat kan je voorkomen door een return false te geven in een onsubmit handler:

HTML:
1
2
3
4
<form action="#dummy" onsubmit="returnVariable('userinfo','cijfer',this.elements['cijfer'].value);return false">
  <input type="text" name="cijfer" />
  <input type="submit" value="Verzend" />
</form>


voordeel is nu dat je het formulier ook met een enter kan laten submitten, en de onclick op je submit-button is dan dus overbodig.
Het keyword 'this' refereert in deze context naar het form zelf. Je formulier hoeft dan dus ook geen name (deprecated en in XHTML zelfs niet eens toegestaan) of id meer te hebben.

oh ja, script-tags doe je zo:
HTML:
1
<script type="text/javascript">


;)

[ Voor 12% gewijzigd door crisp op 05-11-2004 17:09 ]

Intentionally left blank


Verwijderd

Topicstarter
tnx crisp; ik ga eens kijken of ik het dan XHTML standaard kan krijgen :P
Pagina: 1