Autor Zpráva
visionic
Profil *
Dobrý den, jsem ještě v jquery trochu neznalý, ale nevím si rady s tímto:

Mám #superform a ke stávajícímu html chci přidat další pomocí click #plus.

$("#plus").click(function(){
       var oldhtml = $("#superform").html();
       var nevhtml = oldhtml + "<span>Test</span>";
    
       $('#superform').html(nevhtml);
    });

Tahle část funguje a nastáva zde problém. Teď bych chtěl něco odebrat.

Dvakrat jsem kliknul na plus (mam tedy):
<span>Test</span>
<span>Test</span>

po kliknuti na minus bych chtel aby mi zbyl jen jeden:
<span>Test</span>

Bohužel naivně jsem si myslel, že bude fungovat toto:
$("#minus").click(function(){
       var oldhtml = $("#superform").html();
       var nevhtml = oldhtml - "<span>Test</span>";
    
       $('#superform').html(nevhtml);
    });

Tohle mi, ale odstraní celý kód v #superform


Prosím o radu.
Chamurappi
Profil
Reaguji na visionice:
Tahle část funguje
Nemusí. Pokud ve formuláři budeš mít třeba upload souboru, tak ti uvedený kód zruší aktuální hodnotu. Převádíš DOM na HTML kód – což je ztrátový převod – a následně zpětně doplněný HTML kód na DOM.

Bohužel naivně jsem si myslel, že bude fungovat toto
Odčítání řetězců v drtivé většině jazyků neexistuje. Krom toho při převodu DOMu na HTML nemusí to HTML vypadat přesně tak, jak si představuješ (značky napsané malými písmeny apod.), takže i kdyby odčítání fungovalo, nebyl by výsledek spolehlivý.

Já bych postupoval (samozřejmě bez jQuery) tak, že bych si při načítání stránky uložil klon přidávané věci (rozhodně ne její HTML, ale přímo cloneNode(true)) do nějaké proměnné a při kliknutí na plus bych přidával appendChildem klony tohoto klonu do rodiče přidávaných věcí. Zároveň bych si je ukládal do pole (pushem na konec), abych při kliku na mínus mohl vytáhnout poslední položku (popem) a tu odstranit z rodiče přidávaných věcí metodou removeChild.
Možná jsem si ale k zadání domyslel něco, co v něm není. Popsal jsi celkem vágně, o co se snažíš, pochybuji, že cílem je přidávat jen texty ve <span>ech…
visionic
Profil *
Chamurappi:
o co se snažíš, pochybuji, že cílem je přidávat jen texty

Samozřejmě nejde pouze o texty. Tohle řešení jsem tedy zamítnul. Zkouším tedy ajaxem poslat for cyklus. Priklad jsem napsal strucne, takze samozřejmě je obohacen a dolazen lepe, pokud neni GET urcen nebo je mensi nez 1, tak hodnota je 1 a atd.

Tedy php
$zobraz = $_GET['test'];
$plus = $zobraz+1;

for ($cislo = 0; $cislo < $zobraz; $cislo++) {

html kod

}

echo '<a id="plus"  title="'.$plus.'">+</a>';

js
$("#plus").click(function(){
       var hodnota = $( "#plus" ).attr( "title" );
       $.get("index.php", { test: hodnota } );
    });

Ale nechce mi to ten GET zobrazovat. Mam takovy pocit, ze mi tam ale neco chybi, nebo to tak jednoduche nebude.


Jinak kdyz jsem vymenil $.get("index.php", { test: hodnota } ); za alert("Soubor vrátil: " + hodnota);

Tak to opravdu vrací správnou hodnotu.

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: