Autor Zpráva
Honza_n
Profil *
Ahoj,
mám takovou jednoduchou funkci:

function nastav_vzory() {   
alert(arguments.length);
return true;


A spouštím ji z formuláře:

<input id="sg31" name="sg31" type="text" onkeyup="nastav_vzory('restart', this)"><input id="sg32" name="sg32" type="text" onkeyup="nastav_vzory('restart', this)">


Stále se mi to ale spouští dokola a já potřebuju aby se to spustilo jen jednou. Funkce se má spustit jen když napíšu nějaké písmenko.
Honza_n
Profil *
nějak se to samo vyřešilo po restartování PC. Tak nevím ani čím to bylo. Nicméně, kdyby někdo věděl jak do události onkeyup nebo do té funkce zadat přerušení pokud stisknu jakýkoliv jiný znak než platný znak pro slovo, delete nebo backspace, tak to by mi pomohlo. V současnosti se tato náročná funkce spouští kdykoliv (stisknutí šipky, home,end,PgDown,PgUp,Alt,Ctrl, atd. a tento zdlouhavý proces u rekurzivní funkce je nežádoucí).
Witiko
Profil
Pošli si z onkeyup do funkce předaný event objekt a testuj event.keyCode, stačí si vytvořit pole povolených keyCode, při Array.indexOf(event.keyCode) == -1 stačí uživatele z funkce vyreturnovat. Nějak takto:

var keyCodes = [23, 45, 65 ...];

function nastav_vzory(e) {   
  if(keyCodes.indexOf(e.keyCode) < 0) return;
  // další kód
}
  
<input onkeyup="nastav_vzory(event)">



Btw Array.indexOf potřebuje dodefinovat pro MSIE:

if(!Array.indexOf) {
  Array.prototype.indexOf = function(o,i){
    for(var j=this.length,i=i<0?i+j<0?0:i+j:i||0;i<j&&this[i]!==o;i++);return j<=i?-1:i
  }
}

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