Autor Zpráva
sfingxx
Profil
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 divu 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
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');
...jednoduše tlačítko zůstane neaktivní :(
Máš prosím nějaký nápad?

Bez otestovania tipujem:
submit.disabled=false;
A aj inde používať vlastnosť 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.

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: