#javascript #jquery #asp.net
#javascript #jquery #asp.net
Вопрос:
Я выполняю проверку длины с помощью java script. Если длина ввода невелика, я показываю предупреждение, и после этого я хочу вернуть фокус в текстовое поле. Он работает в IE, но не работает в FF. Я много искал в Google, но ни одно решение не могло сработать, пожалуйста, помогите мне.
function IsLengthOK(_title,_control,_length)
{
if(_control.value.length < _length)
{
alert("'" _title "'" " must be minimum " _length " characters in length");
document.getElementById('txtUserName').focus();
return(false);
}
}
Я вызываю эту функцию здесь при событии размытия текстового поля:
if(IsLengthOK("Registration Username",this,6))
{
// do something next.
}
HTML моего текстового поля:
<input id="txtUserName" type="text" tabindex="1" name="txtUserName" style="background: none repeat scroll 0% 0% white;">
Комментарии:
1. Как выглядит ваш HTML? В частности, txtUserName
2. @пользователь576510, пожалуйста, прекратите использовать «plz».
Ответ №1:
function IsLengthOK(_title,_control,_length) {
if(_control.value.length < _length) {
alert("'" _title "'" " must be minimum " _length " characters in length");
setTimeout(function() {
document.getElementById('txtUserName').focus();
}, 0);
return false;
}
}
Это работает в моем Firefox. Он будет сфокусирован на объекте#txtUserName после setTimeout
вызванного.
Комментарии:
1. @Ronak, я пробовал это, но когда я нажал «ОК» в окне предупреждения, фокус переместился на изображение в верхней части баннера на странице. Есть ли что-то, что связано с порядком табуляции и т.д.?
2. У вас не будет доступа к
ele
в вашемsetTimeout
, потому что вы передали функцию в строке, которая будетeval()
‘d в другом контексте.3. @Ronak Зачем вводить глобальный, когда вы могли бы просто создать там анонимную функцию?
4. @alex Зачем создавать анонимную функцию, когда вы можете использовать элемент с одной глобальной переменной?
5. @Ronak Потому что у вас есть хорошая инкапсулированная функция, которая имеет переменную, которая является излишне глобальной.
Ответ №2:
У меня это отлично работает в Firefox 4.
Вот предлагаемая переписать вашу функцию…
function IsLengthOK(_title, _control, _length) {
if (_control.value.length < _length) {
alert("'" _title "'" " must be minimum " _length " characters in length");
_control.focus();
return false;
}
return true;
}
- Вы передаете ссылку на свой элемент, но затем выбираете его снова. Для этого нет причин. Это только усложнит обслуживание. Это также привяжет эту функцию к вашему одному элементу, когда он мог бы быть более гибким.
- Вы возвращаете
false
в круглых скобках. В этом нет необходимости. Кроме того, если условие истинно, оно возвращаетсяfalse
, поэтому логично предположить, что в противном случае оно должно возвращатьсяtrue
(вместоundefined
). - Если у вас есть куча служебных функций проверки, подобных этой, может быть хорошей идеей использовать их как методы
Validator
объекта, например. - Почему вы добавляете в свои переменные префикс
_
? Вы должны удалить их.
Ответ №3:
Вместо того, чтобы использовать document.getElementById
, как вы здесь:
document.getElementById('txtUserName').focus();
Используйте селектор jquery, а затем извлеките необработанный элемент, вот так.
$('#txtUserName')[0].focus();
Комментарии:
1. тот же результат. когда я нажал кнопку ok в окне оповещения, фокус переходит на изображение в баннере.