Autor | Zpráva | ||
---|---|---|---|
iiic Profil |
#1 · Zasláno: 9. 3. 2015, 10:57:48
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 |
#2 · Zasláno: 9. 3. 2015, 20:49:23
iiic:
V tom případě budeš muset onclick nastavovat těm odkazům a ne body jako to děláš teď. |
||
iiic Profil |
#3 · Zasláno: 10. 3. 2015, 10:27:59
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 * |
#4 · Zasláno: 10. 3. 2015, 11:53:38
Co treba neco jako: http://kod.djpw.cz/uilb
Tedy nahradit a obalit puvodni onclick. |
||
Str4wberry Profil |
#5 · Zasláno: 10. 3. 2015, 12:06:16
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 |
#6 · Zasláno: 10. 3. 2015, 15:57:23
juriad:
perfektní způsob, díky takhle mi to funguje přesně podle představ |
||
Časová prodleva: 7 měsíců
|
|||
iiic Profil |
#7 · Zasláno: 30. 9. 2015, 17:28:59
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 |
#8 · Zasláno: 30. 9. 2015, 23:16:04
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. |
||
Časová prodleva: 1 měsíc
|
|||
iiic Profil |
#9 · Zasláno: 11. 11. 2015, 13:54:57
@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 |
#10 · Zasláno: 11. 11. 2015, 18:30:18
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.)
|
||
Časová prodleva: 8 let
|
0