Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.
Toon posts:

Popup geeft waarde niet door

Pagina: 1
Acties:

Verwijderd

Topicstarter
Pagina:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
<script type="text/javascript" src="functions/jscripts/tiny_mce/tiny_mce.js"></script>
//de rest van tiny mce

<script type="text/javascript"> 
function test() { 
  window.open('pop.html','','toolbar=0,scrollbars=1,resizable=0');  
} 
</script> 

<form name="form" method="post" action=""> 
  <textarea name="tekst"></textarea>
  <input type="button" value="klik" onclick="test()" /> 
</form> 


Popup:
JavaScript:
1
2
3
4
5
6
7
8
9
10
<script type="text/javascript"> 
function test() { 
  window.opener.document.forms['form'].elements['tekst'].value  = 'blaat'; 
} 
</script> 

<form name="form1" method="post" action="dummy.html"> 
  <textarea name="textfield">test tekst</textarea> 
  <input type="button" value="klik" onclick="test()" /> 
</form>

Als ik het zo doe, wordt de popup wel geopend, maar als ik op de button klik, verstuurd hij de waarde niet terug naar de textarea op hoofdpagina.

Maar nu het vreemde.. haal ik de tiny mce weg, dan werkt het wel gewoon. En komt de waarde uit de popup wel in de textarea van de andere pagina terrecht.

Iemand enig idee, hoe dit op te lossen?

  • dominic
  • Registratie: Juli 2000
  • Laatst online: 02-11 11:36

dominic

will code for food

Ik weet niet of het helpt in dit specifieke geval; maar als je een window.open uitvoert, moet je het window object van de geopende window altijd in een variabele zetten. (Anders wordt de referentie getrashed)

code:
1
2
3
4
5
6
var popupWindow;

function openPopup(url)
{
  popupWindow = open(url);
}


Wat je in jouw geval even kunt doen is checken of de opener.document.forms[formnaam] geen null is. Dat weet je in ieder geval zeker dat de opener benaderd kan worden en de form benaderbaar is:

code:
1
alert(opener.document.forms[0]);

[ Voor 37% gewijzigd door dominic op 12-07-2008 16:48 ]

Download my music on SoundCloud


Verwijderd

Topicstarter
Als ik
JavaScript:
1
2
3
  alert(opener.document.forms['form']);
of
  alert(opener.document.forms);

doe, dan krijg ik in beide gevallen dit als alert terug: [object]

Is dit goed of niet?

  • dominic
  • Registratie: Juli 2000
  • Laatst online: 02-11 11:36

dominic

will code for food

Het form object is dus netjes benaderbaar. De fout moet dan zitten in de benadering van de .elements array.

Probeer eens
code:
1
alert(opener.document.forms[0].tekst.value);

[ Voor 41% gewijzigd door dominic op 12-07-2008 16:55 ]

Download my music on SoundCloud


Verwijderd

Ja, het is in elk geval niet null of 'undefined'. Wat je echter meestal beter kunt doen, is op de pagina met het formulier een functie maken, en die functie aanroepen vanuit de popup. Dat is nog eens veel makkelijker testen ook.

Overigens: tekst is iets anders dan textfield

[ Voor 11% gewijzigd door Verwijderd op 12-07-2008 16:56 ]


  • dominic
  • Registratie: Juli 2000
  • Laatst online: 02-11 11:36

dominic

will code for food

Verwijderd schreef op zaterdag 12 juli 2008 @ 16:55:
Ja, het is in elk geval niet null of 'undefined'. Wat je echter meestal beter kunt doen, is op de pagina met het formulier een functie maken, en die functie aanroepen vanuit de popup. Dat is nog eens veel makkelijker testen ook.
Ben ik met je eens; het is niet handig vanuit een andere pagina verwijzingen naar diepe structuren te gaan maken. Beter een functie aanroepen.
Overigens: tekst is iets anders dan textfield
Zijn veld heeft de naam tekst

Download my music on SoundCloud


Verwijderd

Topicstarter
@dominic, het volgende
JavaScript:
1
alert(opener.document.forms['form'].tekst.value);
geeft gewoon de waarde 'blaat' terug. Dus dit bestaat gewoon.

@Cheatah, dit komt omdat hij de waarde ook uit de popup terug naar de textarea van de pagina moet sturen.

  • dominic
  • Registratie: Juli 2000
  • Laatst online: 02-11 11:36

dominic

will code for food

-oeps-

[ Voor 99% gewijzigd door dominic op 12-07-2008 17:00 ]

Download my music on SoundCloud


  • dominic
  • Registratie: Juli 2000
  • Laatst online: 02-11 11:36

dominic

will code for food

Verwijderd schreef op zaterdag 12 juli 2008 @ 16:59:
@dominic, het volgende
JavaScript:
1
alert(opener.document.forms['form'].tekst.value);
geeft gewoon de waarde 'blaat' terug. Dus dit bestaat gewoon.

@Cheatah, dit komt omdat hij de waarde ook uit de popup terug naar de textarea van de pagina moet sturen.
Ok, dus in plaats van

code:
1
window.opener.document.forms['form'].elements['tekst'].value  = 'blaat';


wordt het dus

code:
1
opener.document.forms[0].tekst.value = "blaat";


Wat ook mag is

code:
1
opener.document.forms[0].tekst.innerText = "blaat";


geloof ik (Omdat het hier een textarea betreft)..

[ Voor 10% gewijzigd door dominic op 12-07-2008 17:05 ]

Download my music on SoundCloud


Verwijderd

Topicstarter
Helaas ook dat is niet de oplossing. Maar wat ik net al aangaaf, als ik tinymce weghaal, krijg ik de waarde wel gewoon door. Kan hij niet geblokkeerd worden door tiny mce? Of is dat heel raar?

  • dominic
  • Registratie: Juli 2000
  • Laatst online: 02-11 11:36

dominic

will code for food

Verwijderd schreef op zaterdag 12 juli 2008 @ 17:04:
Helaas ook dat is niet de oplossing. Maar wat ik net al aangaaf, als ik tinymce weghaal, krijg ik de waarde wel gewoon door. Kan hij niet geblokkeerd worden door tiny mce? Of is dat heel raar?
Kun je in tinymce terugvinden of hij het huidige window object stript van attributen? Controleer ook op duplicaten van functienamen en variabelen die misschien dus in de .js file al voorkomen.

Download my music on SoundCloud


Verwijderd

Topicstarter
Functie, variable, form en textarea namen heb ik allemaal al een keer gewijzigd, zonder resultaat?

In de wiki van tinymce kon ik ook niet echt iets vinden, wat dit zou kunnen blokkeren?

Verwijderd

Verwijderd schreef op zaterdag 12 juli 2008 @ 17:04:
Helaas ook dat is niet de oplossing. Maar wat ik net al aangaaf, als ik tinymce weghaal, krijg ik de waarde wel gewoon door. Kan hij niet geblokkeerd worden door tiny mce? Of is dat heel raar?
Ik zou eens beginnen met je eigen functies een minder generieke naam te geven. Geef ze bijvoorbeeld een my_ prefix. Dus my_test ofzo.

Verder zou ik altijd gebruiken:
JavaScript:
1
opener.document.forms['form'].elements['tekst'].value = 'blaat';


En nooit:
JavaScript:
1
2
3
opener.document.forms[0].tekst.value = "blaat";
// of
opener.document.forms[0].tekst.innerText = "blaat";


Maar zoals ik al eerder zei: maak eens een functie in het originele document:
JavaScript:
1
2
3
function mySetFormElementValue (formName, elementName, value) {
   document.forms[formName].elements[elementName].value = value;
}


Test eerst vanuit hetzelfde document
code:
1
mySetFormElementValue ('myform', 'myelement', 'huh?');


En daarna vanuit de popup:
code:
1
opener.mySetFormElementValue ('myform', 'myelement', 'blaat');


En last but not least:
Kies geen namen als test en form voor functies of elementen.

Uit de oude doos

[ Voor 4% gewijzigd door Verwijderd op 12-07-2008 17:16 ]


  • dominic
  • Registratie: Juli 2000
  • Laatst online: 02-11 11:36

dominic

will code for food

Verwijderd schreef op zaterdag 12 juli 2008 @ 17:14:
[...]

Ik zou eens beginnen met je eigen functies een minder generieke naam te geven. Geef ze bijvoorbeeld een my_ prefix. Dus my_test ofzo.

Verder zou ik altijd gebruiken:
JavaScript:
1
opener.document.forms['form'].elements['tekst'].value = 'blaat';


En nooit:
JavaScript:
1
2
3
opener.document.forms[0].tekst.value = "blaat";
// of
opener.document.forms[0].tekst.innerText = "blaat";


Maar zoals ik al eerder zei: maak eens een functie in het originele document:
JavaScript:
1
2
3
function mySetFormElementValue (formName, elementName, value) {
   document.forms[formName].elements[elementName].value = value;
}


Test eerst vanuit hetzelfde document
code:
1
mySetFormElementValue ('myform', 'myelement', 'huh?');


En daarna vanuit de popup:
code:
1
opener.mySetFormElementValue ('myform', 'myelement', 'blaat');


En last but not least:
Kies geen namen als test en form voor functies of elementen.

Uit de oude doos
Het probleem zit hem hier niet zozeer in de syntax maar in tinymce die wat uithaalt of voor conflicten zorgt.

Download my music on SoundCloud


Verwijderd

Topicstarter
Ik kom dit als enigste tegen in de wiki van tinymce m.b.t. opener:

"This is because the TinyMCE window arguments of opener window (for example advImage's plugin) somehow doesn't always carry the instance id of the editor which called the popup to the pop-up. "

Bron: http://wiki.moxiecode.com..._prevent_undefined_errors

Zou dit het kunnen zijn, want ik snap eerlijk gezegd niet wat ze bedoelen?

Verwijderd

dominic schreef op zaterdag 12 juli 2008 @ 17:18:

Het probleem zit hem hier niet zozeer in de syntax maar in tinymce die wat uithaalt of voor conflicten zorgt.
Dat lijkt me ook. Maar serieus, 75% van de problemen hier heeft op enige wijze wel iets te maken met slechte gewoontes.

Ik zou eens kijken wat tinyMCE aan namespace pollution doet door te kijken welke properties van window vóór en ná het includen van de tinyMCE scripts zijn gedefinieerd. En uiteraard even in de error console kijken.

  • dominic
  • Registratie: Juli 2000
  • Laatst online: 02-11 11:36

dominic

will code for food

Verwijderd schreef op zaterdag 12 juli 2008 @ 17:22:
[...]

Dat lijkt me ook. Maar serieus, 75% van de problemen hier heeft op enige wijze wel iets te maken met slechte gewoontes.
Agreed.. Maar die zijn zo moeilijk af te leren eh.. ;)

Download my music on SoundCloud


Verwijderd

Topicstarter
Snap ik, maar aan de syntax ligt het voor zover nu te zien niet.

Fout/error console, geeft geen fouten aan. Wat betekend dat het goed gaat volgens mij.
Alleen tiny mce houdt ze tegen.

Script voor, na of tegelijk met script van tiny mce draaien, geeft ook geen verschil.

Dus ik weet het niet?

edit: trouwens ook nog even op de tiny mce manier geprobeerd (zonder resultaat):
code:
1
2
3
4
5
6
7
8
9
10
11
function insertTag() {

            // the html var will hold the values from the tag
            var html = document.forms['maak_pagina_form'].inhoud_pagina_textareaz.value = 'tekstje';

            // insert the value
            tinyMCEPopup.execCommand("mceInsertContent", false, html);

            // Close the dialog
            tinyMCEPopup.close();
        }


Met precies hetzelfde resultaat, geen fouten, geen melding. en geen waarde in mijn textarea :/

[ Voor 48% gewijzigd door Verwijderd op 12-07-2008 17:36 ]

Pagina: 1