|
|
|
| Есть форма с тремя полями делаю проверку по расширению файла ,если нормально то разблокируем кнопку
<form method="post" enctype="multipart/form-data" onchange="return text_file(this.filename.value);">
<input type="file" id="filename" name="fl[]" />
<input type="file" id="filename" name="fl[]" />
<input type="file" id="filename" name="fl[]" />
<input name="send" id="submit" type="submit" value=" Ввод" disabled = "disabled"/>
function text_file(x)
{
var b_submit = document.getElementById('submit');
if(x!='' && /\.(jpg|jpeg|gif|png)$/i(x))
{
b_submit.disabled = false;
return true;
}
else
{
b_submit.disabled = true;
return false;
}
return true;
}
|
с одним полем работает нормально, но с тремя не работает... | |
|
|
|
|
|
|
|
для: serjinio
(21.06.2009 в 21:42)
| | Выбранное вами решение нельзя признать удачным.
Ибо в браузере MSIE cобытие ONCHANGE применяется ТОЛЬКО и ИСКЛЮЧИТЕЛЬНО к 4 (четырём) HTML-тегам.
А именно - к тегам <INPUT type=text>, <INPUT type=file>, <SELECT> и <TEXTAREA>.
Вы же "повесили" это событие на тег <FORM>, который, как видите, в этот список не входит.
Поэтому у большинства юзеров (а MSIE до сих пор - лидер по использованию) ваш скрипт просто не будет вызываться.
Кроме того, атрибут disabled может принимать только два значения - или true, или false.
Вы же используете конструкцию масло="масло".
Наконец, условие ваше внутри функции написано синтаксически неверно.
Правильно надо так:
if (x.search (/\.(jpg|jpeg|gif|png)$/i) > 0)
|
Так что... очень сомнительно, что ЭТО у вас где-то "нормально работало" :-) | |
|
|
|
|
|
|
|
для: PAT
(21.06.2009 в 22:21)
| | Да PAT вы правы.переделал,повесил обработчик на каждое поле,попробовал обойти поля в цикле
но ничего не выходит..как передать массив значений полей в функцию?
function text_file(x)
{
var b_submit = document.getElementById('submit');
var form = document.forms[0];
div_text.innerHTML = 'Файл: '+x+'<br/>';
var cnt = form.length;// всего полей в форме
for (i=0; i < cnt; i++)
{
if (form.elements[i].type == 'file') // отсортировываем нужные поля
{
if (x.search (/\.(jpg|jpeg|gif|png)$/i) > 0) {b_submit.disabled = false;}
else { b_submit.disabled = true;}
}
}
return true;
}
<form method="post" enctype="multipart/form-data">
<input type="file" id="filename" name="fl[]" onchange="text_file(this.value);"/>
<input type="file" id="filename" name="fl[]" onchange="text_file(this.value);"/>
<input id="submit" type="submit" value="Загрузить" disabled />
|
| |
|
|
|
|
|
|
|
для: serjinio
(22.06.2009 в 22:54)
| | 1. передавать функции значение поля не надо, ибо у вас функция всё-равно не универсальная (используется конкретное значение id кнопки сабмита).
Т.е. в инпутах пишите так: onchange="text_file ()"
2. ОЧЕНЬ не рекомендую давать переменным, именам и идентификаторам значения,
кои УЖЕ ИСПОЛЬЗУЮТСЯ самим браузером.
Путаться потом, разбирая код, будете и вы сами, да и браузер иногда при таком раскладе
может не понять - чего от него хотят. Поэтому перепишите так:
<input id="submit123" type="submit" value="Загрузить" disabled />
3. Ну и, наконец, сама функция, с учётом изменений, указанных в двух предыдущих пунктах:
<script>
function text_file ()
{
for (var x = document.getElementsByName ('fl[]'),
j = k = 0, l = o.length; j < l; j++)
if (x [j].value.search (/\.(jpg|jpeg|gif|png)$/i) > 0) k++;
document.getElementById ('submit123').disabled = k != l;
}
</script>
| (будет работать при любом количестве полей с именем fl[]) | |
|
|
|
|
|
|
|
для: PAT
(22.06.2009 в 23:45)
| | PAT,переделал согласно рекомендации но все равно не работает
<input type="file" name="fl[]" onchange="text_file()"/>
<input type="file" name="fl[]" onchange="text_file()"/>
<input id="submit123" type="submit" value=" OK" disabled />
function text_file()
{
var b_submit = document.getElementById('submit123');
var cnt = document.forms[0].length;// всего полей в форме
var x = document.getElementsByName ('fl[]');
for (x,j = k =0, l=cnt; j < l; j++)
{
if (x[j].value.search (/\.(jpg|jpeg|gif|png)$/i) > 0)
{
k++;
b_submit.disabled = k != l;
}
}
}
|
что неправильно сделал? | |
|
|
|
|
|
|
|
для: serjinio
(23.06.2009 в 13:06)
| | Функцию text_file () я вам НАПИСАЛ и здесь же (п.3) - ВЫЛОЖИЛ.
Неужто не увидели?
Вы захотели написать собственную функцию?
И не понимаете - почему она не работает?
Объясню.
Вот это вот:
var cnt = document.forms[0].length;// всего полей в форме
| - полный бред.
Потому что это - количество ФОРМ В ДОКУМЕНТЕ в штуках.
Вы в цикле перебираете элементы с именем fl[] в одной какой-то форме от нулевого элемента до КОЛИЧЕСТВА ФОРМ в документе.
Как говорится, - "В Киеве - дядька, а в огороде - бузина" :-)
Или (как в нашей славной армии): "копать от забора и до обеда" :-) | |
|
|
|
|
|
|
|
для: PAT
(23.06.2009 в 13:51)
| | Я написал потому что функция выдает ошибку в этом участке кода
(var x = document.getElementsByName ('fl[]'),j = k = 0, l = o.length; j < l; j++)
|
и я не понял откуда берется переменная o.length
Я конечно прошу прощения .но .просто хочу разобраться... | |
|
|
|
|
|
|
|
для: serjinio
(23.06.2009 в 21:01)
| | Сорри, моя описка | |
|
|
|
|
|
|
|
для: PAT
(23.06.2009 в 22:39)
| | PAT ,к сожалению так и не смог запустить вашу функцию написал свою
function text_file()
{
var x = document.getElementsByName('fl[]')
//Обходим эти поля в цикле и проверяем соответствуют ли патерну и на пустые ли
for (x,i=k=0; i<x.length; i++)
{
if (x[i].value.search (/\.(jpg|jpeg|gif|png)$/i) > 0){k++}
// если к-во полей без ошибок совпадает с колличеством полей "fl[]" разблокируем кнопку "submit"
document.getElementById ('submit123').disabled=( k== x.length ) ? 0 : 1;
}
}
|
проверил в опере ие и ФФ работает без ошибок на любое произвольное к-во полей ..Спасибо за помощь. | |
|
|
|
|
|
|
|
для: serjinio
(24.06.2009 в 09:03)
| | >"так и не смог запустить вашу функцию написал свою"
Отличие вашей функции от моей, на мой взгляд, одно-единственное: ваша функция написана более неряшливо.
Но - главное - она у вас работает!:-)
С чем я вас и поздравляю!!! | |
|
|
|
|
|
|
|
для: PAT
(24.06.2009 в 09:30)
| | Зря вы обиделись, я ведь поблагодарил от чистого сердца.... | |
|
|
|