Autor | Zpráva | ||
---|---|---|---|
Skg Profil * |
#1 · Zasláno: 7. 3. 2021, 19:22:12
<form id="x$c" method="post" style="border: 2px solid #FFF;"> <button name="y" id="$c" value="1" onclick="return myFce(this.id)"; </form> ... <script> function myFce(elm) { var id = document.getElementById(elm).id; var st = document.getElementById(x + 'id'); var aw = confirm('Upravit tuto položku?'); st.style.borderColor = '#FF0000'; if (aw) { } else { st.style.borderColor = '#FFF'; return false; } } </script> Ahoj... Mám výše uvedený kód a potřeboval bych, aby se současně/ještě před hláškou confirm zvýraznil element (zde form) červeným rámečkem (na stránce je více elementů cyklem v PHP s počítadlem v $c a výběr z nich)... Ve Firefoxu je vše OK - po kliknutí na button se zarámuje element, vyskočí potvrzovací dialog, při OK se formulář odešle, při Zrušit se neodešle a zvýraznění zmizí (border na barvu pozadí). Ale v Chromu, ať dělám, co dělám, vždy nejdříve vyběhne confirm a orámování až po odsouhlasení jen krátce problikne. Dát zvýraznění do funkce zvlášť a tu spouštět jako první nepomáhá, Chrome pořadí funkcí ignoruje a stejně se confirm zobrazí nejdříve. Nešel jsem dílčí řešení v setTimeout a v opoždění hlášky proti vykreslení rámečku, jenže pak se korektně nechová confirm - při neodsouhlasení dialogu se ignoruje return false a formulář se stejně odešle. Prý je možno použít preventDefault(), jenže to se mi nepodařilo rozchodit :( Už nějak nevím, co s tím. Poradíte? |
||
Keeehi Profil |
#2 · Zasláno: 7. 3. 2021, 21:51:32
Já se hlavně divím, že ti to funguje vůbec někde. Na řádku dva ten tag ani není ukončený a na řádku 13 máš apostrofy přesně opačně než je máš mít. Funkce confirm přeruší vykonávání scriptu do té doby než uživatel klikne na jednu z možností. Takže v době kdy vidí ten dialog, tak se to k řádku 16 nemohlo ani dostat. Nicméně, i když se řádky 14 a 16 prohodí, tak máš pravdu, že z nějakého důvodu se to neprovede (vykonávání se "odsune" až po výběr možnosti). Z nějakého důvodu se to prostě nestihne vykonat. Řešení se setTimem funguje, stačí to return false posílat vždy a formulář odeslat skrz javascriptový submit.
function myFce(elm) { var id = document.getElementById(elm).id; var st = document.getElementById('x' + id); st.style.borderColor = '#FF0000'; setTimeout(function () { if (confirm('Upravit tuto položku?')) { st.submit(); } else { st.style.borderColor = '#FFF'; } }, 10); return false; } |
||
Skg Profil * |
#3 · Zasláno: 7. 3. 2021, 22:38:21
Keeehi:
Tohle je takový výtah, sepsal jsem to v rychlosti po dvou hodinách frustrace jen za účelem názornosti. Díky moc, zkusím se zo toho poučit. |
||
Časová prodleva: 3 roky
|
0