| 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: 5 let
|
|||
0