Вот интересно я дурак или что-то здесь не так.
Код

Выделить код

Код:

<html>
<script language="JavaScript">
 function isNumber(elem) {
    var str = elem.value;
    var oneDecimal = false;
    var oneChar = 0;
    // удостоверяемся, что значение не преобразовано в число
    str = str.toString();
    for (var i = 0; i < str.length; i++) {
        oneChar = str.charAt(i).charCodeAt(0);
        // первым символом может быть знак минус
        if (oneChar == 45) {
            if (i != 0) {   
                continue;
            } else {     
                alert("Знак минус может быть только первым символом строки.");
                elem.focus();                                                 
                return false;
            }                
        }    
        // десятичная точка
        if (oneChar <= 46) {
            if (!oneDecimal) {
                oneDecimal = true;
                continue;         
            } else {     
                alert ("В числе может быть только одна десятичная точка!");
                elem.focus();                                              
                return false;
            }                
        }    
        // символы вне диапазона от 0 до 9 не подходят
        if (oneChar < 48  || oneChar > 57) {
            alert("В поле разрешено вводить только числа.");
            elem.focus();                                   
            return false;
        }
    }    
    return true;
 }
</script>

<form name="testform" method="post" action="test5.php">
 <input type="hidden" name="good_id[]" value="123456789">
 <input type="text" name="good_kol[]" value="0.000" OnBlur="isNumber(this)">F1<br>
 <input type="hidden" name="good_id[]" value="000000009">
 <input type="text" name="good_kol[]" value="0.000" OnBlur="isNumber(this)">F2<br>
 <input type="hidden" name="ACTION" value="">
 <input type="submit" name="knop" value="Оформить">
</form>
</html>

Собственно ничего умного здесь нет. Если в поле формы введено неверное значение то об этом надо сказать и установить фокус на это поле. Переход между полями табуляцией.
FF - 1.0.6 - выдает сообщение, переходит на другое поле.
IE - Выдает сообщение и ставит фокус в начало поля с неверным значением.
Mozilla - Выдает сообщение и выделяет значение в поле с неверным значением.

Соттветсвенно поведение и IE и Mozilla меня устраивает. А вот поведение FF нет. Проверялать и Linux и Windows версия.
Если я что то делаю не так - поправьте меня.

Alex99
Не знаю, как это в Mozilla может работать, т.к. беда с передачей фокуса в формах в Gecko длится уже много лет:
https://bugzilla.mozilla.org/show_bug.cgi?id=53579

Попробуйте заменить

Выделить код

Код:

elem.focus();

на

Выделить код

Код:

currentElem=elem.focus();
setTimeout('currentElem.focus();',200);

Так как Вы написали вызывает сл. сообщение.
Ошибка: currentElem has no properties
Источник: http://dp.ceramica.ru/testform.html
Строка: 37

если написать

Выделить код

Код:

currentElem=elem.focus();
           setTimeout('currentElem;',200);

То поведение не меняется.

Тут момент еще такой.
Когда пытаешся перейти в следующее поле мышью то нормально отрабатывает за исключением того что курсор в поле после значения ставит.
Но если табуляцией то фокус на поле не возвращается.

==> Разработка

Alex99
Ой, прошу прощения!

Выделить код

Код:

currentElem=elem;
setTimeout('currentElem.focus();',200);

Вроде работает.
Спасибо вот бы еще природу этого понять.

Al_H пишет

Alex99
Ой, прошу прощения!

Выделить код

Код:

currentElem=elem;
setTimeout('currentElem.focus();',200);
Выделить код

Код:

setTimeout(function(){elem.focus()},200)

И не надо использовать глобальные переменные.

kan
Хороший вариант. Вообще-то, использование безымянных функций сильно отжирает память у распространенных версий Internet Explorer.

Alex99 пишет

...вот бы еще природу этого понять.

Элемент не теряет фокус, пока не завершится обработка события onblur элементом.