Autor Zpráva
SkIpPeR
Profil
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
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
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
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
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
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
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
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
_es:
řádek:
p.idName = 'span_'+num_of_lines;
má dávat každýmu spanu jedinečný ID
a řádek:
input = 'file'.type ;
byl měl udávat type inputu
Nejspíš to není správně, jak by to mělo vypadat?
Chamurappi
Profil
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
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
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
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
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
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;}
Pri zavolaní funkcie v 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
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 :)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0