login  Naam:   Wachtwoord: 
Registreer je!
 Forum

... has no properties (Opgelost)

Offline timo - 04/06/2007 16:56
Avatar van timoPHP ver gevorderde Ik heb een AJAX uploader, die word door php gegenereerd:
  1. <?php
  2. function showFileUploader($uploaderId) {
  3. if (in_array($uploaderId, $this->uploaderIdArray)) {
  4. die($uploaderId." already used. please choose another id.");
  5. return '';
  6. }
  7. else {
  8. $this->uploaderIdArray[] = $uploaderId;
  9. return 'Upload foto<br />
  10. <form id="formName'.$uploaderId.'" method="post" enctype="multipart/form-data" action="'.__abUrl.'/system/upload/1/imageupload.php?dirname='.$this->uploadDirectory.'" target="iframe'.$uploaderId.'">
  11. <input type="hidden" name="id" value="'.$uploaderId.'" />
  12. <span id="uploader'.$uploaderId.'" style="font-family:verdana;font-size:10;">
  13. Upload File: <input name="'.$uploaderId.'" type="file" value="'.$uploaderId.'" onchange=\'return uploadFile(this,"'.$this->uploadDirectory.'")\' /></span>
  14. <span id="loading'.$uploaderId.'"></span>
  15. <iframe name="iframe'.$uploaderId.'" src="imageupload.php" width="400" height="100" style="display:none"> </iframe>
  16. </form>';
  17. }

=> werkt
volgende stap: kies een bestand, onchange word er een functie uitgevoerd:
html
  1. <form id="formNameid1" method="post" enctype="multipart/form-data" action="http://localhost/pj_muller/1//system/upload/1/imageupload.php?dirname=houses/" target="iframeid1">
  2. <input type="hidden" name="id" value="id1" />
  3. <span id="uploaderid1" style="font-family:verdana;font-size:10;">
  4. Upload File: <input name="id1" type="file" value="id1" onchange='return uploadFile(this,"houses/")' /></span>
  5. <span id="loadingid1"></span>
  6. <iframe name="iframeid1" src="imageupload.php" width="400" height="100" style="display:none"> </iframe>
  7.  
  8. </form>


en de js functie die dus word opgeroepen:
  1. function uploadFile(obj, dname) {
  2. uploadDir=obj.value;
  3. idname=obj.name;
  4. dirname=dname;
  5. filename=uploadDir.substr(uploadDir.lastIndexOf('\\')+1);
  6. document.getElementById('loading'+idname).innerHTML="<img src='system/upload/1/loading.gif' alt='loading...' />";
  7. uploaderId = 'uploader'+obj.name;
  8. uploader = obj.name;
  9. document.getElementById('formName'+obj.name).submit();
  10. timeInterval=setInterval("traceUpload()", 1500);
  11. }


dit werkt als ik het in een testbestand zet, maar als ik het in een totaal geheel zet krijg ik de volgende error:
Citaat:
document.formNameid1 has no properties
[Break on this error] document.formNameid1.submit();

(FireBug)

waarom werkt dit niet?

9 antwoorden

Gesponsorde links
Offline citroen - 04/06/2007 17:23
Avatar van citroen Onbekend document.getElementById('formName'+obj.name).submit();

moet dit niet:

document.getElementById('formName'+idname).submit();

zijn
Offline pj_muller00 - 04/06/2007 17:46
Avatar van pj_muller00 PHP interesse (ik werk samen met timo)

is identiek hetzelfde, de declaratie is juist, hij vind enkel de form niet ...
Offline Stijn - 04/06/2007 18:14
Avatar van Stijn PHP expert
  1. document.getElementById('formName'+obj.name).submit();

=>
  1. document.forms[ 'formName' + obj.name ].submit();
Offline timo - 04/06/2007 18:57 (laatste wijziging 04/06/2007 19:11)
Avatar van timo PHP ver gevorderde helaas.. nog steeds niet, hij doet alsof dat form niet bestaat:S
Offline Martijn1989 - 04/06/2007 19:19
Avatar van Martijn1989 PHP ver gevorderde Je moet de <form> tage toch ook het attribuut name meegeven?
Offline timo - 04/06/2007 19:31
Avatar van timo PHP ver gevorderde geen verschil..
Offline pj_muller00 - 04/06/2007 19:33
Avatar van pj_muller00 PHP interesse Timo, niet vergeten te werken rond de subobjecten en die google maps ;)
Offline BramBo - 06/06/2007 13:55
Avatar van BramBo JS gevorderde Het beste is forms te benaderen via Document.forms of via zijn naam dus niet id. (let wel dat wanneer je met de name benadering wilt werken dus: document.formname dit niet meer geldig is in xhtml strict)

Mocht je dit alles dynamisch willen benaderen kan je er voor kiezen om het document.forms object te doorlopen..
  1. var f = document.getElementsByTagName('form');
  2. for (var i=(f.length-1);i>=0;i--)
  3. {
  4. alert(f[i].name);
  5. }


Dit zou in jou geval dus leiden tot:
  1. /* retouneert het formulier als object
  2.   Je kan natuurlijk ook .className gebruiken of gewoon .name
  3.   als identifier..
  4. */
  5. function getFormById(Id) {
  6. var f = document.getElementsByTagName('form');
  7. for (var i=(f.length-1);i>=0;i--)
  8. {
  9. if (f[i].id == Id) return f[i];
  10. }
  11. }


nog als sidenote: een waarschijnlijke incompatibility factor kan getElementByTagName zijn, hier is de ' lijst'
IE :5 FF: 1 Opera:9
W3C-Standard
Offline timo - 06/06/2007 14:46 (laatste wijziging 06/06/2007 14:51)
Avatar van timo PHP ver gevorderde als ik document.formName_id1.submit() doe werkt het nog niet... ook al heeft het form de naam formName_id1, doctype is transitional xhtml dus daar kan het niet aan liggen..

edit: opgelost,
ik werkte met templates, het zat zo:
  1. {fckeditor}
  2. <script type="text/javascript" src="{__abUrl}system/upload/1/uploader.js"></script>
  3. <a href="javascript: document.addobj.submit();">Voeg object toe</a>
  4. <input type="submit" name="addobj" value="Voeg object toe" />
  5. {uploader}
  6. </form>

*vroeg me ook al af wrm de submit niet werkte

nu heb ik de {uploader} erachter gezet, dit loste alles op, want hiervoor stodn er een form binnen een form...
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.243s