JavaScript одна функция к нескольким input полям

D1
На сайте с 05.06.2008
Offline
51
1472

Добрый день!

Помогите пожалуйста с 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++) {

// 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>

помогите пожалуйста!

Магазин аккаунтов с балансом Litres,DNS,Ozon,Rotapost и еще 50+ других сервисов тут - vk.cc/7QK0Sk
D1
На сайте с 05.06.2008
Offline
51
#1
Flash.UA
На сайте с 11.09.2007
Offline
46
#2

Советую просто использовать этот плагин. http://blueimp.github.com/jQuery-File-Upload/

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий