| 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 hrefu 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 hrefu, měla by funkce v onclicku 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: 15 let
|
|||
0