Autor | Zpráva | ||
---|---|---|---|
SkIpPeR Profil |
#1 · Zasláno: 20. 12. 2010, 20:16:34 · Upravil/a: SkIpPeR
Zdravím,
Mám přidávání více fotek a jednotlivé inputy se přidávají přes JS (v kterém nejsem žádný expert) HTML: <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="fupload[]"><br> <span id="fotos"></span> <a href="#" onclick="plus('fotos'); return false;" >Přidat další Screenshot</a><br> <input type="submit" value="Nahrát"> </form> JavaScript: function plus(element){ var x = document.getElementById( element ); var input = document.createElement('input'); input.setAttribute('name', 'fupload[]' ); input.setAttribute('type', 'file' ); var odkaz = document.write(' <a href=\"\" onclick=\"minus(\''+element+'\'); return false;\" >Odebrat odkaz</a>'); var p = document.createElement('span'); p.setAttribute('id', 'span_' + num_of_lines ); var br = document.createElement('br'); p.appendChild(input); p.appendChild(odkaz); p.appendChild(br); x.appendChild(p); } function minus(element){ if( num_of_lines < 1 ) return; var d = document.getElementById( element ); var olddiv = document.getElementById( 'input_' + num_of_lines ); num_of_lines--; d.removeChild(olddiv); } Však po kliknutí na "Přidat Screenshot" se objeví bílá obrazovka a nahoře "Odebrat odkaz" Pomužete prosím? |
||
_es Profil |
#2 · Zasláno: 20. 12. 2010, 20:21:12
SkIpPeR:
„po kliknutí na "Přidat Screenshot" se objeví bílá obrazovka“ Psaní metodou document.write po načtení stránky maže stránku |
||
SkIpPeR Profil |
#3 · Zasláno: 20. 12. 2010, 20:34:07
Po upravení se nic neděje, řádek 8 v JS ódu upraven na:
var odkaz = this.innerHTML = ' <a href=\"\" onclick=\"minus(\''+element+'\'); return false;\" >Odebrat odkaz</a>'; |
||
_es Profil |
#4 · Zasláno: 20. 12. 2010, 20:44:28 · Upravil/a: _es
SkIpPeR:
„Slová“ v tvojom kóde fungujú aj ako odkazy na dokumentáciu. Môžeš tak zistiť, čo je argumentom metódy appendChild .
Čo čakáš, že bude v this vo funkcii plus ?
Prehliadače majú aj chybové konzoly, kde sa dozvieš pri skúšaní svojho kódu zaujímavé veci. Asi sa ti zíde aj toto. |
||
SkIpPeR Profil |
#5 · Zasláno: 20. 12. 2010, 21:07:52
A jak se to dá udělat prosím, ztrácim se v tom, JS sem ještě tak neštudoval, jen sem okopíroval již hotoví script co jsem vygooglil a jen trochu upravil -> tim odkazem
|
||
_es Profil |
#6 · Zasláno: 20. 12. 2010, 21:20:06
SkIpPeR:
„jen sem okopíroval již hotoví script co jsem vygooglil a jen trochu upravil“ Asi ti to google trochu zle vygooglil a ty si to ešte trochu zle upravil. Skús pridávať odkaz rovnakým spôsobom, akým pridávaš input , br a p a nahradiť setAttribute priamym priradením vlastnosti, tak, ako je to uvedené v tom odkaze.
|
||
SkIpPeR Profil |
#7 · Zasláno: 21. 12. 2010, 17:37:56 · Upravil/a: SkIpPeR
upraveno na:
var num_of_lines = 0; function plus(element){ num_of_lines ++; var x = document.getElementById( element ); var p = document.createElement('span'); p.idName = 'span_'+num_of_lines; var input = document.createElement('input'); input.name = 'fupload[]' ; input = 'file'.type ; var odkaz = document.createElement('a'); odkaz.onclick = function(){'minus(\''+element+'\'); return false;'} var newText = document.createTextNode('Odebrat odkaz'); odkaz.appendChild(newText); var br = document.createElement('br'); p.appendChild(input); p.appendChild(odkaz); p.appendChild(br); x.appendChild(p); } Dev Tools ukazuje: Uncaught Error: NOT_FOUND_ERR: DOM Exception 8 plus (anonymous function) onclick a odkazuje na řádek 21 v tomto kódu |
||
_es Profil |
#8 · Zasláno: 21. 12. 2010, 17:58:27 · Upravil/a: _es
SkIpPeR:
Čo asi majú robiť riadky: p.idName = 'span_'+num_of_lines; a input = 'file'.type ; ?
„odkazuje na řádek 21 v tomto kódu“ Ale tá chyba vznikla predchádzajúcim nezmyselným kódom, viď tie dva riadky. |
||
SkIpPeR Profil |
#9 · Zasláno: 21. 12. 2010, 18:05:41
_es:
řádek: p.idName = 'span_'+num_of_lines; a řádek: input = 'file'.type ; Nejspíš to není správně, jak by to mělo vypadat? |
||
Chamurappi Profil |
#10 · Zasláno: 21. 12. 2010, 18:13:36
Reaguji na SkIpPeRa:
„má dávat každýmu spanu jedinečný ID“ Proč nastavuješ jakousi neexistující vlastnost idName ? Kde ses o ní dočetl? Proč nenastavuješ id ?
„Nejspíš to není správně, jak by to mělo vypadat?“ Nějak smysluplně. Vždyť ten kód nemá ani žádnou vnitřní logiku: > input.name = 'fupload[]' ;
> input = 'file'.type ;
Proč je každý řádek úplně jiný, když oběma chceš nastavit nějakou vlastnost na nějakou hodnotu? |
||
SkIpPeR Profil |
#11 · Zasláno: 21. 12. 2010, 18:21:45
ok opraveno:
var num_of_lines = 0; function plus(element){ num_of_lines ++; var x = document.getElementById( element ); var p = document.createElement('span'); p.id = 'span_'+num_of_lines; var input = document.createElement('input'); input.name = 'fupload[]' ; input.type = 'file' ; var odkaz = document.createElement('a'); odkaz.href = '\'\''; odkaz.onclick = function(){'minus(\''+element+'\'); return false;'} var newText = document.createTextNode('Odebrat odkaz'); odkaz.appendChild(newText); var br = document.createElement('br'); p.appendChild(input); p.appendChild(odkaz); p.appendChild(br); x.appendChild(p); } function minus(element){ if( num_of_lines < 1 ) return; var d = document.getElementById( element ); var olddiv = document.getElementById( 'input_' + num_of_lines ); num_of_lines--; d.removeChild(olddiv); } Ale teď se mi zas při přidání jednoho inputu a odkazu, po kliknutí na odkaz (Odebrat odkaz), načítá znovu ta celá stránka a pokud přidám více inputu, tak po kliknutí na jeden odkaz (Odebrat odkaz) se načte stránka bez žádneho inputu |
||
Chamurappi Profil |
#12 · Zasláno: 21. 12. 2010, 18:44:08
Reaguji na SkIpPeRa:
„po kliknutí na odkaz (Odebrat odkaz), načítá znovu ta celá stránka“ Spíš se ti načítá stránka s adresou odpovídající dvěma apostrofům. Proč nastavuješ do href u jako hodnotu dva apostrofy?
Chceš-li přiřadit funkci do onclick , pročti si znovu stránku odkázanou z příspěvku [#4] a tam uvidíš správný zápis.
Chceš-li zabránit přechodu na adresu v href u, měla by funkce v onclick u vracet false .
|
||
SkIpPeR Profil |
#13 · Zasláno: 21. 12. 2010, 18:53:34
Chamurappi:
Když to upravím takhle, tak to také nefunguje: var odkaz = document.createElement('a'); odkaz.href = ''; odkaz.onclick = function(){minus(element); return false;} |
||
Chamurappi Profil |
#14 · Zasláno: 21. 12. 2010, 19:34:37
Reaguji na SkIpPeRa:
Tahle úprava je správně. Problém bude jinde, nejspíš ve funkci minus — pokud vypadá tak, jak jsi uvedl v příspěvku #11, tak tam na řádku 32 hledáš element s určitým ID, ale takové ID nikde ničemu nenastavuješ.
|
||
_es Profil |
#15 · Zasláno: 21. 12. 2010, 19:41:24
SkIpPeR:
„tak to také nefunguje“ Čo znamená nefunguje? Nauč sa pracovať s nejakým debuggerom, skoro každý prehliadač niečo také má, alebo sa dá pridať. A sleduj v ňom hodnoty premenných. odkaz.onclick = function(){minus(element); return false;} onclick bude do funkcie minus predaná hodnota, ktorú mala premenná element v čase pred skončením funkcie plus .
Nechce sa mi rozmýšľať, či to je dobre alebo zle, ale keď píšeš, že „nefunguje“, tak asi zle. Načo máš vôbec v tých funkciách premennú element ? Potrebuješ ju na niečo?
Skús si ten algoritmus trochu lepšie premyslieť. |
||
SkIpPeR Profil |
#16 · Zasláno: 21. 12. 2010, 19:41:27 · Upravil/a: SkIpPeR
Aha, už to funguje, díky moc za pomoc :)
Hold si budu muset nastudovat JS, ještě sem v něm toho tolik nedělal, zatim sem jen používal jQuery atp. EDIT: Potom ještě řeším problém Zde, pokud by jste mi mohli prosím pomoci :) |
||
Časová prodleva: 13 let
|
0