Microsoft poskytuje kvalitnú technickú podporu k svojim produktom, technik
z MS mi dokázal dať riešenie problému a chyba
s tlačidlom <button>
, ktorú obsahuje Internet
Explorer, sa dá pomocou JS opraviť.
Internet Explorer vždy odosiela vo formulári text, ktorý sa
zobrazuje ako popisok (label) tlačidla. V prípade tlačidla <button>
to predstavuje hodnota innerText
.
When the BUTTON element is submitted in a form, the innerText value is submitted.
Riešením je definovať atribút value
a pri odoslaní
formuláru zmeniť hodnotu innerText na hodnotu definovanú vo
value
. Tu však nastáva problém: IE nesprávne vyhodnotí vlastnosť
value
aj metódu getAttribute('value')
.
<html>
<body>
<form method="get" action="login.cgi" onsubmit="submit();">
<button type="submit" id="btnAction" name="action" value="login">Prihlásiť</button>
</form>
</body>
</html>
function submit() {
var e = document.getElementById('btnAction');
alert(e.value);
alert(e.innerText);
alert(e.getAttribute('value'));
}
Vyzerá to, akoby IE nedokázal vrátiť skutočnú, definovanú hodnotu
atribútu value
. Technická podpora Microsoftu mi však bola
schopná povedať, ako túto hodnotu získať:
var e = document.getElementById('btnAction');
alert(e.attributes['value'].value);
K atribútu treba pristupovať kolekciou attributes
, ktorá
vráti objekt attribute
,
čiže hodnotu atribútu získame pomocou vlastnosti value
.
funkia submit()
, opravujúca odosielanie dát, teda bude
vyzerať takto:
function submit() {
var e = document.getElementById('btnAction');
e.value = e.attributes['value'].value;
}
Toto riešenie má však menšiu chybičku krásy: IE zmení aj zobrazovaný
text tlačidla, potom odošle dáta na server a zobrazí novú stránku.
Chvíľu teda tlačidlo obsahuje zobrazenú hodnotu vlasnosti
value
. Ak niekto pozná riešenie, ako tomuto zabrániť,
poprosím ho zapísať to do komentárov.