Каков наилучший способ заменить кнопку просмотра файлов в HTML?

Ответы

Q: Что такое лямбда-выражение в C ++ 11?

A: Под капотом это объект автогенерированного класса с оператором перегрузки () Уст. Такой объект называется замыканием и создается компилятором. Эта концепция «закрытия» находится рядом с концепцией связывания с C ++ 11. Но lambdas обычно генерируют лучший код.

В: Когда я буду использовать один?

A: Определить «простую и малую логику» и спросить компилятор выполнить генерацию из предыдущего вопроса. Вы даете компилятору некоторые выражения, которые вы хотите быть внутри оператора ().

Q: Какой класс проблемы они решают, что было невозможно до их введения?

A: Это какой-то синтаксис сахара, как перегрузка операторов вместо функций для пользовательских операций add, subrtact ... Но он сохраняет больше строк ненужного кода, чтобы обернуть 1-3 строки реальной логики для некоторых классов и т. д.! Некоторые инженеры считают, что если число строк меньше, то вероятность ошибок в нем меньше (я тоже так думаю)

Пример использования

auto x = [=](int arg1){printf("%i", arg1); };
void(*f)(int) = x;
f(1);
x(1);

Дополнительные сведения о лямбдах, не затрагиваемые вопросом. Игнорируйте этот раздел, если вы не заинтересованы

1. Захваченные значения. Что вы можете захватить

1.1. Вы можете ссылаться на переменную со статической продолжительностью хранения в lambdas. Все они захвачены.

1.2. Вы можете использовать лямбда для значений захвата «по значению». В этом случае захваченные вары будут скопированы в объект функции (замыкание).

[captureVar1,captureVar2](int arg1){}

1.3. Вы можете захватить ссылку. & Амп; - в этом контексте означают ссылки, а не указатели.

   [&captureVar1,&captureVar2](int arg1){}

1.4. Он содержит обозначения для захвата всех нестатических варов по значению или по ссылке

  [=](int arg1){} // capture all not-static vars by value

  [&](int arg1){} // capture all not-static vars by reference

1.5. Он содержит обозначения для захвата всех нестатических варов по значению или путем ссылки и указания smth. Больше. Примеры: Захват всех нестатических варов по значению, но путем захвата ссылки Param2

[=,&Param2](int arg1){} 

Захват всех нестатических варов по ссылке, но с помощью захвата значения Param2

[&,Param2](int arg1){} 

2. Вывод типа возврата

2.1. Возвращаемый тип Lambda может быть выведен, если лямбда - это одно выражение. Или вы можете явно указать его.

[=](int arg1)->trailing_return_type{return trailing_return_type();}

Если lambda имеет более одного выражения, тогда возвращаемый тип должен быть указан с помощью возвращаемого типа возврата. Кроме того, подобный синтаксис может применяться к автофункциям и функциям-членам

3. Захваченные значения. Что вы не можете захватить

3.1. Вы можете захватывать только локальные вары, а не переменную-член объекта.

4. Свержения

4.1. lambda не является указателем на функцию и не является анонимной функцией, но может быть неявно преобразован в указатель на функцию.

p.s.

  1. Подробнее о лямбда-грамматической информации можно найти в рабочем проекте для языка программирования C ++ # 337, 2012-01-16, 5.1.2. Лямбда-выражения, стр.88
  2. В C ++ 14 добавлена ​​дополнительная функция, названная «захват init». Он позволяет выполнять произвольное объявление членов данных закрытия:
    auto toFloat = [](int value) { return float(value);};
    auto interpolate = [min = toFloat(0), max = toFloat(255)](int value)->float { return (value - min) / (max - min);};
    
16
задан Abhishek Pandey 24 February 2017 в 08:46
поделиться

5 ответов

Лучший способ состоит в том, чтобы сделать элемент управления вводом файла [почти 114] невидимый (путем предоставления его, очень низкая непрозрачность - не делает" видимость: скрытый " или" дисплей: ни один "), и абсолютно располагают что-то под ним - с более низким z-индекс .

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

Эта статья идет всесторонняя на технике.

22
ответ дан levik 24 February 2017 в 08:46
поделиться

Браузерам действительно не нравится, когда Вы бездельничаете с исходными данными файла, но возможно сделать это. Я видел несколько методов, но самое простое должно абсолютно расположить вход файла над тем, что Вы хотите использовать в качестве кнопки и обнулить ее непрозрачность или почти нуль. Это означает, что, когда пользователь нажимает на изображение (или независимо от того, что Вы имеете под там) они на самом деле нажимают на невидимую кнопку обзора.

, Например:

<input type="file" id="fileInput">
<img src="...">
#fileInput{
    position: absolute;
    opacity: 0;
    -moz-opacity: 0;
    filter: alpha(opacity=0);
}
5
ответ дан thanksd 24 February 2017 в 08:46
поделиться

Если Вы не возражаете использовать JavaScript, можно установить непрозрачность введенного файлом к 0, поместить стилизованное управление в вершину через z-индекс и отправить clickevents от кнопки до введенного файлом. Посмотрите здесь для техники: http://www.quirksmode.org/dom/inputfile.html

2
ответ дан erlando 24 February 2017 в 08:46
поделиться

Это не технически возможно для целей безопасности, таким образом, пользователь не может быть введен в заблуждение.

Однако существует несколько обходных решений - смотрят на http://www.quirksmode.org/dom/inputfile.html для одного примера.

Для записи, этот вопрос уже задали здесь (где я дал тот же ответ).

0
ответ дан Community 24 February 2017 в 08:46
поделиться

Можно использовать загрузчик Flash как SWFupload, чтобы сделать это, также.

0
ответ дан ceejayoz 24 February 2017 в 08:46
поделиться