2012-03-28 5 views
1

Nicht wirklich gut im regulären Ausdruck, aber warum, wenn eine Übereinstimmung gefunden wird console.log feuert zweimal?Javascript .match plus jQuery keyup(), doppelte Übereinstimmung und seltsames Verhalten

$('#name').keyup(function() { 
    var regex = /[\€]/g; 
    var count = (m = $(this).val().match(regex)) ? m.length : 0; // Num matches 
    console.log(count); 
}); 

Ausgabe mit 'Hallo':

0 
0 
0 
0 
0 

Nach der Zugabe von '€' Symbol 'hallo' haben wir:

0 
0 
0 
0 
0 
1 
1 

Nach dem Hinzufügen 'h' Symbol ‚Hallo € 'wir haben:

0 
0 
0 
0 
0 
1 
1 
1 

Sollte nicht nur eine sein 1 nach dem Hinzufügen von '€' zu 'Hallo'?

+0

möchten Sie vielleicht das Keypress-Ereignis anstelle des Keyup-Ereignisses behandeln, sollte dies das Ereignis für Ctrl, Alt usw. entfernt. – jbabey

+0

@jbabey danke. – gremo

Antwort

3

Keyup fängt Steuerschlüssel ebenfalls ab. Ich denke, es gibt keine dedizierte Taste für Euro auf Ihrer Tastatur, also drücken Sie etwas wie alt-E, um es einzugeben. Mit der Alt-Taste wird der Handler zweimal ausgelöst.

+0

Richtig! Es gibt keinen dedizierten Euro-Symbol-Schlüssel (es ist kombiniert Alt Gr + 'E'). Denken Sie, dass der Doppelaufruf von '.keyup()' ein Problem bei der Verwendung von 'count' sein könnte? – gremo

+0

@Gremo Ihre Zählvariable ist lokal für den Keyup-Handler, so dass sie sich nicht gegenseitig stören - Sie erhalten nur die gleichen Antworten, die mehrmals gedruckt werden. – jbabey