With Safari 3.1, there were changes to the way keydown and keypress event handlers work. It looks like there are still some bugs in the way Ext deals with them.

For example, in NumberField.js, the function below is called on the keypress event. In Safari 3.1, this event sends a charCode and not a keyCode. So say you type a period (charCode 46). This function confuses it with keyCode 46, which is e.DELETE. As a result, it doesn't filter that character, as it should.

Code:
        var keyPress = function(e){
            var k = e.getKey();
            if(!Ext.isIE && (e.isSpecialKey() || k == e.BACKSPACE || k == e.DELETE)){
                return;
            }
            var c = e.getCharCode();
            if(allowed.indexOf(String.fromCharCode(c)) === -1){
                e.stopEvent();
            }
        };

a. 2.1
b. ext-base.js
c. mac
d. Safari Version 3.1.1 (5525.18)
e. see above
f. N/A
g. N/A
h. N/A