Autor | Zpráva | ||
---|---|---|---|
sfingxx Profil |
#1 · Zasláno: 30. 4. 2014, 20:57:18
Dobrý večer, IE8 a IE7 se mi zakousnou a neprožvýkají tenhle skript, netuším však, kde je chyba... pomůžete někdo prosím?
// JavaScript Document var a = Math.ceil(Math.random() * 10); var b = Math.ceil(Math.random() * 10); var c = a + b; function DrawBotBoot() { var div = document.getElementById('botboot'); var input = document.createElement('input'); input.name = 'botboot'; input.id = 'BotBootInput'; input.type = 'number'; input.class = 'input_field'; input.setAttribute('maxlength','2'); input.setAttribute('size','2'); input.setAttribute('required','required'); input.addEventListener('keyup',ValidBotBoot,false); div.innerHTML += "<label for='botboot' class='contact_label'>Kolik se rovná "+ a + " + " + b +" = </label>"; div.appendChild(input); } |
||
Chamurappi Profil |
Reaguji na sfingxxe:
1) Na řádku 11, class je vyhrazené slovo. Vlastnost obsahující třídu se navíc na rozdíl od atributu ani nejmenuje class , ale className , takže ani v jiných prohlížečích to nefunguje správně (nic to nedělá).
2) Další problémy můžou vzniknout na řádcích 12 a 13, protože používáš setAttribute na něco, co by šlo změnit běžnými vlastnostmi maxLength a size .
3) Vlastnost ani atribut required nepodporují. Ani devítka ji nepodporuje, to znamená, že ji budou všechny tři verze ignorovat.
4) Způsob přiřazení události přes addEventListener funguje až od Exploreru 9. Použij normální vlastnost onkeyup , ta funguje všude. Jak vypadá ValidBotBoot ?
Proč, když nakonec stejně nastavuješ nějaký kus kódu do innerHTML , nepřidáváš stejným způsobem rovnou i ten <input> ?
Mimochodem, ten řádek 16 celý stávající obsah div u zruší a znovuvytvoří, takže pokud v tomtéž elementu už jsou nějaká vyplněná formulářová políčka, nebo něco s událostmi přiřazenými skriptem (ne v atributu), vznikne zřetelné poškození ve všech prohlížečích.
Na závěr si dovolím podotknout, že za otázkou se dělá jeden otazník. Nechceš si ty další dva smazat? |
||
sfingxx Profil |
#3 · Zasláno: 30. 4. 2014, 21:23:07 · Upravil/a: sfingxx
Chamurappi:
Díky za poznámky, jen doplním ValidBotBoot
function ValidBotBoot(e) { var submit = document.getElementById('form_submit'); var d = e.target.value; if (d == c) { submit.removeAttribute('disabled'); return true; }else{ submit.setAttribute('disabled','disabled'); } return false; } Jinak to opravím dle Tvých poznámek... snad to bude o.k. Takže mám opraveno, ještě mě zlobí (teda nefachá v IE8, IE7) submit.removeAttribute('disabled'); ...jednoduše tlačítko zůstane neaktivní :( Máš prosím nějaký nápad? Děkuji. |
||
_es Profil |
sfingxx:
> ještě mě zlobí (teda nefachá v IE8, IE7) submit.removeAttribute('disabled'); > Máš prosím nějaký nápad? Bez otestovania tipujem: submit.disabled=false; disabled a nie atribút disabled (v JS).
|
||
Chamurappi Profil |
Reaguji na sfingxxe:
Problém je také v e.target . Ve starším Exploreru e nebude naplněné, místo něj bude existovat globální objekt event . A ten nemá target , ale srcElement .
var event = e || window.event; var target = event.target || event.srcElement; var d = target.value; Mimochodem, jestli je toto antispam a jestli jsem pochopil, jak ho zamýšlíš, tak nebude fungovat, protože spamboti vůbec nespouštějí JS. Čehož jde i využít. |
||
Časová prodleva: 11 let
|
0