21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
iiic
Profil
Ahoj, udělal jsem jednoduchý scriptík, který přidá na odkazy s atributem data-confirm="…" javascriptové ověření typu "opravdu chcete … udělat?".
Pokud ovšem má odkaz (či cokoliv jiného) už nějaký onclick chtěl bych, aby se toto ověření přidalo před něj a ne až po něm.
Dá se tohl nějak zařídit? Script přikládám

document.body.onclick = function(e) {
    e = window.event ? event.srcElement : e.target;
    if (e.getAttribute('data-confirm')) {
        if (confirm(e.getAttribute('data-confirm'))) {
            if(e.href) {
                e.href += new RegExp('^.+\\?.*$').test(e.href) ? '&' : '?';
                e.href +='jsConfirmed=1';
            }
            return true;
        } else {
            return false;
        }
    }
};
Keeehi
Profil
iiic:
V tom případě budeš muset onclick nastavovat těm odkazům a ne body jako to děláš teď.
iiic
Profil
Keeehi:

něco takového jsem zkoušel:
window.onload = function() {
    var anchors = document.getElementsByTagName('a');
    for(var i = 0; i < anchors.length; i++) {
        var anchor = anchors[i];
        if(anchor.getAttribute('data-confirm')) {
            anchor.addEventListener("click", function(){alert('omfg');}, false);
        }
    }
}

ale stále se mi zavolá napřed původní onclick a až pak se alertne 'omfg' … nebo ještě jiný postup?
juriad_
Profil *
Co treba neco jako: http://kod.djpw.cz/uilb
Tedy nahradit a obalit puvodni onclick.
Str4wberry
Profil
Podstatné je pořadí, ve kterém se události pro ten samý element připojí.

U různých elementů se provádějí dle probublávání vzhůru (nejprve se vyvolá click u odkazu a až potom click u <body>).
iiic
Profil
juriad:

perfektní způsob, díky

takhle mi to funguje přesně podle představ
iiic
Profil
Teď jsem zjistil, že bych potřeboval funkci ještě rozšířit…

když mám zhruba takovýto kód:
<a id="lol" href="#nekam" onclick="console.log('1')">click</a>
<script>
document.getElementById('lol').addEventListener('click', function (){ console.log('2') }, false);
</script>

(s tím, že svůj script můžu vložit až po scriptu přidávajícím `console.log('2')` na onclick #lol elementu)

vím s pomocí zde v odpovědi vloženého scriptu jak funkci pověsit před `console.log('1')`, ale jak ji vykonat až po `console.log('2')` ? Dá se s tímto ještě něco dělat?
Chamurappi
Profil
Reaguji na iiice:
Tuším, že u metody addEventListener nelze spoléhat na pořadí, minimálně v kombinaci s tradiční cestou atributů onudálost.

Dá se s tímto ještě něco dělat?
Můžeš si stávající onclick uložit do proměnné, přepsat ho novou funkcí a v ní zavolat kdekoliv jakkoliv ten původní onclick z té proměnné.
Viz třeba Diskuse JPW: Zavolání události + nějaké své vlastní akce.
iiic
Profil
@Chamurappi:

Zrovna tohle v tomto případě nepomůže. Události přidávané pomocí Element.addEventListener('click', …) se totiž pak nedají detekovat pomocí Element.onclick ani jejich obsah takto nelze dostat.
Chamurappi
Profil
Reaguji na iiice:
Ale můžeš si ten aktuální onclick někam uložit a přidat ho přes další addEventListener, ne? (Pokud platí zadání ze #7.)

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