Показать сообщение отдельно
  #1 (permalink)  
Старый 13.03.2017, 21:54
Интересующийся
Отправить личное сообщение для HaseProgram Посмотреть профиль Найти все сообщения от HaseProgram
 
Регистрация: 07.03.2012
Сообщений: 28

Выделение в замыкании.
Добрый вечер.
Имеется примерно следующая структура:
<label class="file-upload" for="upload-img">
  <mark>Choose img...</mark>
  ...
  <input type="file" id="upload-img">
</label>
...
<label class="file-upload" for="upload-img">
  <mark>Choose img...</mark>
  ...
  <input type="file" id="upload-img">
</label>

Необходимо по событию, что изменился инпут, присвоить его значение в его марк.
Делал так (после прочтения вот этой темы http://javascript.ru/basic/closure)
function SetPath(sel, fm)
{
  fm.innerHTML = sel.value;
}

function FileInput()
{
  var label = document.пetElementsByClassName('file-upload');
  for(var i = 0; i < label.length; i++)
  {
    var inp = label[i].getElementsByTagName('input')[0];
    inp.onchange = function(x)
    {
      // console.log(x) выводит 0,1 при вызове функции FileInput()
      return function()
      {
        // передать label как параметр не получилось
        var label = document.getElementsByClassName('file-upload');
        // console.log(x) выводит всегда 0 при изменении любого инпута
        var mark = label[x].getElementsByTagName('mark');
        SetPath(this, mark);
      }
    }(i)
  }
}

Собственно вопрос - почему Х всегда 0? И как это можно реализовать?
Второй вопрос,
inp.onchange = function(x) {}

Разве здесь функция не требует первым параметром event? Если да, то почему в статье на которую я привел ссылку все работает? Если нет, то опять же почему? Заранее спасибо.

Последний раз редактировалось HaseProgram, 13.03.2017 в 22:30.
Ответить с цитированием