Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.07.2012, 23:22
Новичок на форуме
Отправить личное сообщение для fabrique Посмотреть профиль Найти все сообщения от fabrique
 
Регистрация: 31.07.2012
Сообщений: 9

JavaScript одна функция к нескольким input полям
Добрый день!
Помогите пожалуйста с JS
Нашел нужный мне код - вот он
Код:
<style>
  .thumb {
    height: 75px;
    border: 1px solid #000;
    margin: 10px 5px 0 0;
  }
</style>

<input type="file" id="files" name="files[]" multiple />
<output id="list"></output>

<script>
  function handleFileSelect(evt) {
    var files = evt.target.files; // FileList object

    // Loop through the FileList and render image files as thumbnails.
    for (var i = 0, f; f = files[i]; i++) {

      // Only process image files.
      if (!f.type.match('image.*')) {
        continue;
      }

      var reader = new FileReader();

      // Closure to capture the file information.
      reader.onload = (function(theFile) {
        return function(e) {
          // Render thumbnail.
          var span = document.createElement('span');
          span.innerHTML = ['<img class="thumb" src="', e.target.result,
                            '" title="', escape(theFile.name), '"/>'].join('');
          document.getElementById('list').insertBefore(span, null);
        };
      })(f);

      // Read in the image file as a data URL.
      reader.readAsDataURL(f);
    }
  }

  document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>
смысл кода в том, что при выборе изображения - появляется его превью в указанном месте еще до загрузки. Это HTML5 и работает не во всех браузерах. подробнее здесь (кому интересно) http://www.html5rocks.com/ru/tutorials/file/dndfiles/

на странице код

Код:
<input type="file" id="files" name="files[]" />
<output id="list"></output>
соответственно выбор файла и форма, где появляется превью

С одним полем по выбору файла это работает.

У меня таких полей пять шт. (должно быть именно пять полей с выбором файла).
и данный код не работает со вторым, третьем, ит.д полями - превью отображается только в первом поле в остальных только имя файла прописывается..



так как я совсем ничего не понимаю в JS, я допер только до того, что - размножил данные скрипты (пять штук) - и каждому полю выбора и вывода присвоил уникальные id и прелипил каждый скрипт к этим полям.
Таким образом работает и изображения появляются под каждым полем.



Но теперь на странице пять скриптов...

Пожалуйста подскажите как можно и вообще можно ли как нибудь объединить это все дело в один скрипт?
На данны момент у меня это работает следующим образом.

Код:
<input name="fileAttach[]" type="file" id="files"  /><br />
<output id="list"></output>
<input name="fileAttach[]" type="file" id="files1"  /><br />
<output id="list1"></output>
<input name="fileAttach[]" type="file" id="files2"  /><br />
<output id="list2"></output>
<input name="fileAttach[]" type="file" id="files3"  /><br />
<output id="list3"></output>
<input name="fileAttach[]" type="file" id="files4"  /><br />
<output id="list4"></output>
и пять скриптов... (здесь они минифицированы - в нормальном виде в первом коде). Разница лишь в подставленных в каждый скрипт уникальных id

Код:
<script type="text/javascript">if(window.FileReader){function handleFileSelect(a){var b=a.target.files;var c=b[0];var d=new FileReader;d.onload=function(a){return function(b){document.getElementById("list").innerHTML=['<img src="',b.target.result,'" title="',a.name,'" width="100px"/>'].join("")}}(c);d.readAsDataURL(c)}}document.getElementById("files").addEventListener("change",handleFileSelect,false)</script>
<script type="text/javascript">if(window.FileReader){function handleFileSelect(a){var b=a.target.files;var c=b[0];var d=new FileReader;d.onload=function(a){return function(b){document.getElementById("list1").innerHTML=['<img src="',b.target.result,'" title="',a.name,'" width="100px"/>'].join("")}}(c);d.readAsDataURL(c)}}document.getElementById("files1").addEventListener("change",handleFileSelect,false)</script>
<script type="text/javascript">if(window.FileReader){function handleFileSelect(a){var b=a.target.files;var c=b[0];var d=new FileReader;d.onload=function(a){return function(b){document.getElementById("list2").innerHTML=['<img src="',b.target.result,'" title="',a.name,'" width="100px"/>'].join("")}}(c);d.readAsDataURL(c)}}document.getElementById("files2").addEventListener("change",handleFileSelect,false)</script>
<script type="text/javascript">if(window.FileReader){function handleFileSelect(a){var b=a.target.files;var c=b[0];var d=new FileReader;d.onload=function(a){return function(b){document.getElementById("list3").innerHTML=['<img src="',b.target.result,'" title="',a.name,'" width="100px"/>'].join("")}}(c);d.readAsDataURL(c)}}document.getElementById("files3").addEventListener("change",handleFileSelect,false)</script>
<script type="text/javascript">if(window.FileReader){function handleFileSelect(a){var b=a.target.files;var c=b[0];var d=new FileReader;d.onload=function(a){return function(b){document.getElementById("list4").innerHTML=['<img src="',b.target.result,'" title="',a.name,'" width="100px"/>'].join("")}}(c);d.readAsDataURL(c)}}document.getElementById("files4").addEventListener("change",handleFileSelect,false)</script>
помогите пожалуйста!
Ответить с цитированием
  #2 (permalink)  
Старый 31.07.2012, 23:44
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

попробуйте вот таких 5 написать присваиваний событий а функцию одну
document.getElementById("files1").addEventListener("change", function(e){handleFileSelect(e,'list1')},false);
.....
document.getElementById("files5").addEventListener("change", function(e){handleFileSelect(e,'list5')},false);
//--
 function handleFileSelect(evt,list) {
    var files = evt.target.files; 
.......
document.getElementById(list).insertBefore(span, null);
.......
Ответить с цитированием
  #3 (permalink)  
Старый 01.08.2012, 00:06
Новичок на форуме
Отправить личное сообщение для fabrique Посмотреть профиль Найти все сообщения от fabrique
 
Регистрация: 31.07.2012
Сообщений: 9

Сообщение от vadim5june Посмотреть сообщение
попробуйте вот таких 5 написать присваиваний событий а функцию одну
document.getElementById("files1").addEventListener("change", function(e){handleFileSelect(e,'list1')},false);
.....
document.getElementById("files5").addEventListener("change", function(e){handleFileSelect(e,'list5')},false);
//--
 function handleFileSelect(evt,list) {
    var files = evt.target.files; 
.......
document.getElementById(list).insertBefore(span, null);
.......
Спасибо огромное за внимание!
Дело в том что я совершенно не знаком с синтаксисом JS. Для меня совсем ничего не значат ни точки, ни скобки, ни что за чем стоит... HTML я понимаю, а если дело касается JS или PHP то, все, стопор.

Вы не могли бы вписать данные переменные в нужные места?

Я их тут напишу с нужными переменными - просто копи пасте сдейте пожалуйста))

Вот сам скрипт

Код:
<script>
  function handleFileSelect(evt) {
    var files = evt.target.files; // FileList object

    // Loop through the FileList and render image files as thumbnails.
    for (var i = 0, f; f = files[i]; i++) {

      // Only process image files.
      if (!f.type.match('image.*')) {
        continue;
      }

      var reader = new FileReader();

      // Closure to capture the file information.
      reader.onload = (function(theFile) {
        return function(e) {
          // Render thumbnail.
          var span = document.createElement('span');
          span.innerHTML = ['<img class="thumb" src="', e.target.result,
                            '" title="', escape(theFile.name), '"/>'].join('');
          document.getElementById('list').insertBefore(span, null);
        };
      })(f);

      // Read in the image file as a data URL.
      reader.readAsDataURL(f);
    }
  }

  document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>
вот эти не знаю как называются... части кода.

Код:
document.getElementById("files").addEventListener("change", function(e){handleFileSelect(e,'list')},false);
document.getElementById("files1").addEventListener("change", function(e){handleFileSelect(e,'list1')},false);
document.getElementById("files2").addEventListener("change", function(e){handleFileSelect(e,'list2')},false);
document.getElementById("files3").addEventListener("change", function(e){handleFileSelect(e,'list3')},false);
document.getElementById("files4").addEventListener("change", function(e){handleFileSelect(e,'list4')},false);
и вот Вы писали остальной код - я совсем не понял это
Код:
//--
 function handleFileSelect(evt,list) {
    var files = evt.target.files; 
.......
document.getElementById(list).insertBefore(span, null);
.......
Ответить с цитированием
  #4 (permalink)  
Старый 01.08.2012, 00:15
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

<style>
  .thumb {
    height: 75px;
    border: 1px solid #000;
    margin: 10px 5px 0 0;
  }
</style>
<input name="fileAttach[]" type="file" 
id="files1"  /><br />
<output id="list1"></output>
<input 

name="fileAttach[]" type="file" id="files2"  /><br />
<output id="list2"></output>
<input name="fileAttach[]" type="file" 
id="files3"  /><br />
<output id="list3"></output>
<input name="fileAttach[]" type="file" id="files4"  /><br />
<output id="list4"></output>
<input name="fileAttach[]" type="file" id="files4"  /><br />
<output id="list5"></output>
<script>
function handleFileSelect(evt,list) {
alert(2);alert(evt);alert(list);
    var files = evt.target.files;  
for (var i = 0, f; f = files[i]; i++) 
{
 if (!f.type.match('image.*')) 
{
        continue;
      };     
 var reader = new FileReader();
reader.onload = (function(theFile) {
 return function(e) {
 var span = document.createElement('span');
          span.innerHTML = ['<img class="thumb" src="', e.target.result,'" title="', escape(theFile.name), '"/>'].join('');
       document.getElementById(list).insertBefore(span, null);
       };
      })(f);
reader.readAsDataURL(f);
    }
  }
;
document.getElementById

('files1').addEventListener('change', 
function(e){handleFileSelect(e,'list1')}, false);
 document.getElementById('files2').addEventListener('change', 
function(e){handleFileSelect(e,'list2')}, false);
document.getElementById('files3').addEventListener('change', 
function(e){handleFileSelect(e,'list3')}, false);
 document.getElementById('files4').addEventListener('change', 
function(e){handleFileSelect(e,'list4')}, false);
document.getElementById('files5').addEventListener('change', 
function(e){handleFileSelect(e,'list5')}, false);
</script>

Последний раз редактировалось vadim5june, 01.08.2012 в 01:02.
Ответить с цитированием
  #5 (permalink)  
Старый 01.08.2012, 00:38
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

вот здесь работает
http://all-html5.narod.ru/3/vrem11.htm
Ответить с цитированием
  #6 (permalink)  
Старый 01.08.2012, 05:00
Новичок на форуме
Отправить личное сообщение для fabrique Посмотреть профиль Найти все сообщения от fabrique
 
Регистрация: 31.07.2012
Сообщений: 9

ОГРОМНОЕ ВАМ СПАСИБО!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При добавлении DOCTYPE "плывут" размеры input type=text Demath (X)HTML/CSS 4 08.07.2012 19:27
нужна функция аналог slideToggle, только на Javascript Telnet jQuery 4 04.10.2011 11:43
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34
Функция меняющая значение input type text. Value не подходит( Sundog Общие вопросы Javascript 1 25.09.2009 15:06