Autor Zpráva
Skg
Profil *
<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
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 *
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.

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