2012-04-10 7 views
-2

Ich habe eine Funktion erstellt, die prüft, ob ein Eingabetextfeld gültig ist, und entweder einen Klassennamen an das Element anhängen, das einem bestimmten css-Code entspricht, oder nichts tun, wenn es gültig ist.regex, die false und true zurückgibt

function checkInputText(inputType, elem, oldClass, classError) { 
    var inputT = document.getElementById(elem); 
    var oldClass = oldClass; 
    var b = regex[inputType].test(inputT.value) 
    if (!b) { 
     inputT.className = classError + ' ' + oldClass; 
     return false; 
    } else { 
     inputT.className = oldClass; 
    } 
} 

jedoch aus unbekannten Gründen, wenn die Funktion ruft die .test() Funktion, die sie für ein Ereignis das erste Mal true zurück, aber wenn Sie es erneut versuchen wird false zurückgegeben.

Der vollständige Code hier ist http://jsfiddle.net/assuredlonewolf/cscyB/2/

+3

Nur damit Sie wissen, diese Zeile 'var oldClass = oldClass;' tut nichts. – Paulpro

+0

@ PaulP.R.O. - LOL D: –

+0

Unabhängig vom Problem, setzen Sie ein Semikolon am Ende der .test-Zeile - es ist vielleicht nicht die Ursache für Ihr Problem, aber es ist ein Muss. –

Antwort

5

„Wie bei exec (oder mit ihm in Kombination), die so genannten Test mehrmals auf der gleichen globalen Instanz regulären Ausdrucks hinter dem vorherigen Spiel voranbringen wird.“ https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp/test

Sie können dieses Verhalten umgehen, indem Sie entweder die lastIndex auf 0 zurücksetzen oder einen neuen Regex für jeden Test erstellen.

+0

o.O. –

Verwandte Themen