Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: блокировка кнопки
 
 автор: serjinio   (21.06.2009 в 21:42)   письмо автору
 
 

Есть форма с тремя полями делаю проверку по расширению файла ,если нормально то разблокируем кнопку
<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;
  }

с одним полем работает нормально, но с тремя не работает...

  Ответить  
 
 автор: PAT   (21.06.2009 в 22:21)   письмо автору
 
   для: 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)


Так что... очень сомнительно, что ЭТО у вас где-то "нормально работало" :-)

  Ответить  
 
 автор: serjinio   (22.06.2009 в 22:54)   письмо автору
 
   для: 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 />
  

  Ответить  
 
 автор: PAT   (22.06.2009 в 23:45)   письмо автору
 
   для: 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[])

  Ответить  
 
 автор: serjinio   (23.06.2009 в 13:06)   письмо автору
 
   для: 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;
        } 
    }
    
}

что неправильно сделал?

  Ответить  
 
 автор: PAT   (23.06.2009 в 13:51)   письмо автору
 
   для: serjinio   (23.06.2009 в 13:06)
 

Функцию text_file () я вам НАПИСАЛ и здесь же (п.3) - ВЫЛОЖИЛ.
Неужто не увидели?

Вы захотели написать собственную функцию?
И не понимаете - почему она не работает?

Объясню.

Вот это вот:
var cnt = document.forms[0].length;// всего полей в форме
- полный бред.
Потому что это - количество ФОРМ В ДОКУМЕНТЕ в штуках.
Вы в цикле перебираете элементы с именем fl[] в одной какой-то форме от нулевого элемента до КОЛИЧЕСТВА ФОРМ в документе.
Как говорится, - "В Киеве - дядька, а в огороде - бузина" :-)
Или (как в нашей славной армии): "копать от забора и до обеда" :-)

  Ответить  
 
 автор: serjinio   (23.06.2009 в 21:01)   письмо автору
 
   для: PAT   (23.06.2009 в 13:51)
 

Я написал потому что функция выдает ошибку в этом участке кода
(var x = document.getElementsByName ('fl[]'),j = k = 0, l = o.length; j < l; j++)

и я не понял откуда берется переменная o.length
Я конечно прошу прощения .но .просто хочу разобраться...

  Ответить  
 
 автор: PAT   (23.06.2009 в 22:39)   письмо автору
 
   для: serjinio   (23.06.2009 в 21:01)
 

Сорри, моя описка
o.length >> x.length

  Ответить  
 
 автор: serjinio   (24.06.2009 в 09:03)   письмо автору
 
   для: 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;    
    }    
}

проверил в опере ие и ФФ работает без ошибок на любое произвольное к-во полей ..Спасибо за помощь.

  Ответить  
 
 автор: PAT   (24.06.2009 в 09:30)   письмо автору
 
   для: serjinio   (24.06.2009 в 09:03)
 

>"так и не смог запустить вашу функцию написал свою"

Отличие вашей функции от моей, на мой взгляд, одно-единственное: ваша функция написана более неряшливо.

Но - главное - она у вас работает!:-)
С чем я вас и поздравляю!!!

  Ответить  
 
 автор: serjinio   (24.06.2009 в 11:53)   письмо автору
 
   для: PAT   (24.06.2009 в 09:30)
 

Зря вы обиделись, я ведь поблагодарил от чистого сердца....

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования