Javascript onchange отличается в IE и FireFox - PullRequest
1 голос
/ 13 января 2010

Когда это событие onchange в IE возвращает false, фокус IE остается на этом поле ввода. В Firefox фокус всегда перемещается к следующему полю независимо.

HTML:

input name="seminar_donation" type="text" id="seminar_donation"
onchange="return CheckTotal(this);"

JavaScript:

function CheckTotal(inputbox) {  
    if (isNaN(parseInt(inputbox.value))) {  
         alert("Please enter only digits 0-9");  
         inputbox.focus();  
         return false;  
    }  
    return true;  
}  

В IE мне даже не нужна функция inputbox.focus (), которая, к сожалению, в Firefox, похоже, ничего не делает для сохранения фокусировки на ошибочном поле ввода. Как я могу заставить Firefox остаться в этом окне ввода?

Ответы [ 3 ]

1 голос
/ 13 января 2010

В ответе, который, по-видимому, здесь больше не предлагается, предлагались вопросы «сроков», хотя и на несколько иную тему. Поэтому я нашел в Google тайм-аут и нашел блог Майка Ранкина с 2005 года, который позволил мне решить проблему, изменив focus () на:

var t= setTimeout('document.getElementById("seminar_donation").focus()',1);

Итак, что происходит, Firefox все еще переходит к следующему полю, но спустя 1 мс этот код возвращает фокус ошибочному полю. Это глупо, потому что если в следующем поле есть событие облура, то onblur сработает, когда тайм-аут заставит фокус вернуться назад. Но это обходной путь для явно давней ошибки в Firefox.

1 голос
/ 13 января 2010
setTimeout('document.getElementById("seminar_donation").focus()',1);
0 голосов
/ 13 января 2010

Вы пытались добавить "return" в атрибуте onchange? т.е.

<input name="seminar_donation" type="text" id="seminar_donation" onchange="return CheckTotal(this);">

Я не совсем уверен, что это сработает, но стоит попробовать?

Редактировать: чтобы уточнить, причина, по которой я не уверен, заключается в том, что я обычно подходил бы к этому иначе и связывал обработчик событий в javascript, а не в html.

...