Shoptet - e-shop s napojením na Aukro a Facebook od 190,- Kč za měsíc. 30 dní zdarma
Zobrazují se odpovědi 1 až 11 z 11

Předání hodnoty z odkazu

  1. Zdravím,
    měl bych na vás malou prosbu.

    Na stránce mám několik odkazů v tomto formátu:
    Kód:
    <a href="admin _iframe.php?id_object=1" class="iframe\>ID 1</a>
    <a href="admin _iframe.php?id_object=2" class="iframe\>ID 2</a>
    <a href="admin _iframe.php?id_object=3" class="iframe\>ID 3</a>
    Po kliknutí na odkaz se otevře iframe, kde lze upravit údaje odeslanému ID. Iframe vyvolám následujícím kódem:
    Kód:
    <script language="JavaScript" type="text/javascript">
    	$(document).ready(function(){	
    		$('a.iframe').fancybox({
    			width			: 402,
    			height			: 492,
    			autoScale		: false,
    			transitionIn	: 'elastic',
    			transitionOut	: 'elastic',
    			titlePosition 	: 'no',
    			scrolling		: 'no',
    			overlayOpacity	: 0.7,
    			overlayColor	: '#000000',
    			type			: 'iframe',
    			onClosed		: function(){update ()}
    		});		
    	});
    </script>
    Pokud je kliknuto na odkaz, potřeboval bych do funkce update() v onClosed poslat hodnotu id objektu kterou daný odkaz obsahuje, tak aby se po zavřeni iframu spustila funkce update().
    Můžete mi prosím poradit,
    děkuji, Petr.

  2. Normálně si v PHP tam, kde tvoříš ten <script>... (tj. admin _iframe.php) načteš hodnotu GET parametru id_object a vložíš ji (její hodnotu) mezi závorky u update().

  3. Asi jsem mou situaci špatně popsal.
    Obě ukázky kódu (js i html) jsou na rodičovské tránce, ze kterého se vyvolá nová stránka (modání okno typu iframe) s url adresou, která nese hodnotu id_object. Tzn. že v rodičovském souboru nemohu použít $_GET (resp. mohu, ale id_object je prázdný). Proto bych potřeboval poradit jak přečíst url při kliknutí na odkaz
    …a nebo…
    jak zavolat funkci z potomka (iframu) která se nachází na rodičovské stránce. V tomto případě už bych už mohl použit $_GET, ale nevím jak tu fci (v tomto případe update()) zavolat.
    Snad jsem to teď napsal o trochu lépe a nezamotal se do toho :-)

  4. Snad jsem to teď napsal o trochu lépe a nezamotal se do toho :-)
    No moc jsem to nepochopil ;-)

    Proto bych potřeboval poradit jak přečíst url při kliknutí na odkaz
    Pokud ti jde o zjištění hodnoty atributu href u odkazu, na který jsi klikl, tak to se dá udělat takhle jednoduše:

    Kód:
    $('a').on('click', function() {
        alert($(this).attr('href'));
    });
    jak zavolat funkci z potomka (iframu) která se nachází na rodičovské stránce.
    To se dělá zase takhle:

    Kód:
    parent.funkce();

  5. po upřesnění v pm doplním ještě parsing id z href pro jednomistne cislo na konci odkazu

    Kód:
    var href = $(this).attr('href');
    var id = parseInt( href.substr( href.length-1 , 1 ));

  6. Chjoo, nějak se v tom motám...

    jiriki: Tak jsem to vyřešil nakonec malinko jinak. ID vkladam do jinéhe atributu než je "href", takže ID mám ihned k dispozici.

    800XE: Mohl bys mi prosím více poradit s tím voláním funkce na rodičovské stránce po uavření iframu (modální okno). Zkoušel jsem to jednoduše tak jak jsi napsal, ale po zavření iframu se mi refreshuje celá rodičovská stráka -> něco je špatně. Protože funkce update() obsahuje AJAX pro aktualizaci dat konkrétního ID.
    Kód:
    </form>  
    ...
    <input type='submit' value='Odeslat' onClick="parent.update();" />
    </form>
    Naposledy upravil Petr-K : 17.01.2012 v 22:24

  7. po zavření iframu se mi refreshuje celá rodičovská stráka -> něco je špatně. Protože funkce update() obsahuje AJAX pro aktualizaci dat konkrétního ID.
    Chtělo by to vidět víc kódu(nejlíp celý), z toho popisu jsem pořád nějaký zmatený. Vůbec nevím, kde se ti ta funkce update bere - ta se přepisuje při každém otevření iframu pro konkrétní ID? Nebo to ID má uložené v nějaké globální proměnné? Nebo by se jí ID mělo předávat jako parametr? V posledním jmenovaném případě by stačilo ty odkazy neinicializovat najednou, ale projít je zvlášť:

    Kód:
    $('a.iframe').each(function() {
        var id = $(this).attr('tvůj tajný atribut');
        $(this).fancybox({
            ...
            onClosed: function() {
                update(id);
            }
        });
    });
    Na konkrétnější odpověď by to chtělo víc informací.

  8. 800XE: Vytvořil jsem malou ukázku, na které je přesně demonstrovaný můj problém.

    Zjednodušeně... potřebuji po odeslání formuláře v modálním okně poslat do funkce update() id objektu, na který bylo kliknuto před vyvoláním modálního okna. Jestli bude pro volání funkce update() použita metoda fancyBoxu onClosed nebo jiný způsob, to je mi vcelku jedno.

    Pozn. Nyní tam je natvrdo vloženo id 1 (aby ukázka fungovala, jinak by to hodilo chybu -> id by bylo momentálně prázdné).

  9. V tom případě ten tvůj kód stačí upravit přesně tak, jak jsem navrhoval včera ;-)

    Kód:
    $(document).ready(function() {
        $('a.iframe').each(function() {
            var
                $link = $(this),
                id = $link.attr('href').match(/\d+$/);
            $link.fancybox({
                width           : 402,
                height          : 492,
                autoScale       : false,
                transitionIn    : 'elastic',
                transitionOut   : 'elastic',
                titlePosition   : 'no',
                scrolling       : 'no',
                overlayOpacity  : 0.7,
                overlayColor    : '#000000',
                type            : 'iframe',
                onClosed        : function() {update(id);}
            });
        });
    });
            
    function update(id) {
        alert(id);
        return false;
    }

  10. Paráda, funguje to.
    Koukám, že ani okopírovat kus kódu správně neumím... moje chyba, že mi tvůj první návrh nefungoval.
    Přestože to funguje, nerozumím jak to funguje. Můžeš mi ve zkratce napsat jak řešení pracuje?
    Jinak smekám a děkuji!
    P.

  11. Funkce each postupně projde všechny prvky vybrané selektorem(v tomhle případě všechny odkazy, které mají třídu .iframe) a v každém opakování provede funkci, kterou jí předáš jako parametr:

    Kód:
    $('selektor').each(function() {
        kód, který se provede v každém opakování
    });
    Kontext(this) je vždycky objekt právě procházeného prvku:

    Kód:
    $('a.iframe').each(function() {
        alert($(this).attr('href'));
    });
    je ekvivalentní zápisu:

    Kód:
    alert($('a.iframe').eq(0).attr('href'));
    alert($('a.iframe').eq(1).attr('href'));
    alert($('a.iframe').eq(2).attr('href'));
    Id z atributu href se dá zjistit pomocí regulárního výrazu, který vrací číslo na konci řetězce. Pro "iframe.php?id_object=1" vrací 1, pro "iframe.php?id_object=666" vrací 666, atd.

    Kód:
    match(/\d+$/)
    V každém opakování si zjištěné id uložíš do proměnné:

    Kód:
    var id = $(this).attr('href').match(/\d+$/);
    Inicializuješ odkaz zavoláním funkce fancybox:

    Kód:
    $(this).fancybox({
        ...
    });
    A v callbacku, který se zavolá po zavření okna fancyboxu(onClosed) zavoláš funkci update, které jako parametr předáš číslo, které sis předtím uložil do proměnné id:

    Kód:
    ...
    onClosed: function() {update(id);}
    ...

Podobná témata

  1. Odpovědí: 3
    Poslední příspěvek: 07.08.2011, 15:00
Hostujeme u Server powered by TELE3