У меня есть случай, когда у меня есть куча текстовых полей и переключателей на экране, которые все построены динамически с различными DIV. Существуют стандартные процедуры для всех текстовых полей для проверки ввода, но в зависимости от выбора переключателя запись в текстовом поле может быть недействительной, когда она была действительной изначально. Я не могу использовать onblur с помощью переключателей, потому что они могли перейти от радиокнопки в одно из текстовых полей, которое было сделано недействительным, и создать бесконечный цикл, поскольку я помещаю фокус в недопустимый элемент. Поскольку каждое текстовое поле имеет свои собственные специальные параметры для вызовов onblur, я считаю, что лучший способ сделать это - вызывать событие onblur для текстовых полей, когда форма отправляется, чтобы убедиться, что все записи по-прежнему действительны при настройке переключателя. выбрали. Я также нуждаюсь в этом, чтобы прекратить отправку, если одно из событий onblur возвращает false, чтобы они могли исправить неверное текстовое поле. Это то, что я написал ...Javascript: Как перебирать элементы и вызывать обработчик onblur для определенных элементов.
for (var intElement = 0; intElement < document.forms[0].elements.length; intElement = intElement + 1)
{
if (document.forms[0].elements[intElement].name.substr(3) == "FactorAmount") // The first 3 characters of the name are a unique identifier for each field
{
if (document.forms[0].elements[intElement].onblur())
{
return false;
break;
}
}
}
return true;
Я изначально был (! Document.forms [0] .elements [intElement] .onblur()), но предупреждающие сообщения от ONBLUR событий не выскакивают когда у меня было это. Теперь появляются предупреждающие сообщения, но при этом они продолжают перебирать элементы, если они попадают в ошибку. Я прошел через это с помощью отладчика в обоих направлениях, и, похоже, он просто зацикливается, но он либо 1) не останавливается, а возвращает false, когда мне это нужно, или 2) не выполняет мои предупреждающие сообщения, чтобы сообщить пользователю, что ошибка был. Может кто-то может помочь? Это, наверное, что-то глупое, что я делаю.
Метод ONBLUR, который вызывался выглядит так ...
function f_VerifyRange(tagFactor, reaMin, reaMax, intPrecision, sLOB, sIL, sFactorCode)
{
var tagCreditOrDebit;
var tagIsTotal;
var tagPercentageOrDecimal;
eval("tagCreditOrDebit = document.forms[0]." + tagFactor.name.substr(0,3) + "CreditOrDebitC");
eval("tagIsTotal = document.forms[0]." + tagFactor.name.substr(0,3) + "IsTotal");
eval("tagPercentageOrDecimal = document.forms[0]." + tagFactor.name.substr(0,3) + "PercentageOrDecimal");
if (tagPercentageOrDecimal.value == "P")
{
reaMax = Math.round((reaMax - 1) * 100);
reaMin = Math.round((1 - reaMin) * 100);
if (parseFloat(tagFactor.value) == 0)
{
alert("Please enter a value other than 0 or leave this field blank.");
f_SetFocus(tagFactor);
return false;
}
if (tagIsTotal.value == "True")
{
if (tagCreditOrDebit.checked)
{
if (parseFloat(tagFactor.value) > reaMin)
{
alert("Please enter a value less than or equal to " + reaMin + "% for a credit or " + reaMax + "% for a debit.");
f_SetFocus(tagFactor);
return false;
}
}
else
{
if (parseFloat(tagFactor.value) > reaMax)
{
alert("Please enter a value less than or equal to " + reaMin + "% for a credit or " + reaMax + "% for a debit.");
f_SetFocus(tagFactor);
return false;
}
}
}
}
return true;
}
EDIT: Я думаю, что я понял, почему это не работает, как ожидалось, но я до сих пор не знаю, как я могу выполнить то, что мне нужно. Линия ниже ...
if (!document.forms[0].elements[intElement].onblur())
или
if (document.forms[0].elements[intElement].onblur())
не возвращает то, что единственная функция ONBLUR (f_VerifyRange) возвращается. Вместо этого он всегда возвращает либо истину, либо ложь, несмотря ни на что. В первом случае он возвращает true, а затем завершает работу и прерывает отправку после первого текстового поля, даже если в первом текстовом поле не было ошибок. Во втором случае он возвращает false и пробегает все поля. Несмотря на то, что могут быть ошибки (которые он отображает), он не считает, что есть какие-либо ошибки, поэтому он продолжается с помощью submit. Я предполагаю, что мне действительно нужно, как получить возвращаемое значение из f_VerifyRange, которое является моей функцией onblur.
Не могли бы вы пропустить их все, даже если есть ошибка? Таким образом, вы можете сразу отобразить все ошибки на странице, возможно, сосредоточив внимание на первом на странице. – EndangeredMassa 2008-10-22 14:19:45
Это было бы неплохо, но я думаю, что моя главная проблема заключается в том, что страница выгружается неправильно. Прямо сейчас появляется предупреждение, а затем страница выгружается, поэтому у пользователя нет возможности что-либо исправить, или предупреждение не появляется, и экран не выгружается, потому что что-то не так. – 2008-10-22 14:46:53
Я думаю, мне нужно будет увидеть еще один код, чтобы отладить это. Как выглядят ваши методы onblur? – 2008-10-22 14:57:55