Как сделать клик по тегу, щелкнуть по кнопке файла?
Для этого есть дополнительная поддержка браузера, но я использую ES6, поэтому, если вы действительно хотите, чтобы он работал более старыми и любой браузер, попытайтесь перевести его с помощью babel или просто используйте ES5:
const aTag = document.getElementById("open-file-uploader");
const fileInput = document.getElementById("input-button");
aTag.addEventListener("click", () => fileInput.click());
#input-button {
position: abosulte;
width: 1px;
height: 1px;
clip: rect(1px 1px 1px 1px);
clip: rect(1px, 1px, 1px, 1px);
}
<a href="#" id="open-file-uploader">Open file uploader</a>
<input type="file" id="input-button" />
Похож на ошибку Clang для меня.
Общее правило состоит в том, что функции-члены одного и того же имени в разных базовых классах не перегружаются. Например:
struct Foo { void bar(); };
struct Baz { void bar(int); };
struct Quux : Foo, Baz { };
int main() { Quux().bar(); } // error on both GCC and Clang
По какой-то причине Clang не может диагностировать эту двусмысленность для operator()
.
A using-declaration
поднимает именованные базовые классы в область производного класса , что позволяет им перегружать. Следовательно:
struct Quux_2 : Foo, Baz { using Foo::bar; using Baz::bar; };
Quux_2().bar(); // OK.
В рабочей версии кода декларации using
рекурсивно привносят каждое объявление operator()
в аргументы шаблона в область самого производного класса, что позволяет им перегружать.
Исходный код не должен компилироваться, gcc здесь верен. См. [Class.member.lookup]:
В противном случае (т. Е. C не содержит декларации f или результирующий набор объявлений пуст), S (f, C) изначально пуст. Если C имеет базовые классы, вычислите набор поиска для f в каждом подбодете прямого базового класса Bi и объедините каждое такое поисковое множество S (f, Bi) в свою очередь в S (f, C). - [..] - В противном случае, если множества объявлений S (f, Bi) и S (f, C) различаются, слияние неоднозначно ...
blockquote>Начальный набор объявлений (
overload
не имеет методов) - так объедините все базы, все из которых имеют разные наборы. Таким образом, слияние должно потерпеть неудачу. Это правило применяется только в том случае, если набор объявленийoverload
пуст, поэтому явное добавлениеusing F1::operator()
работает.
Foo::bar
, так иBaz::bar
, из которых ни один из них не является предпочтительным? – M.M 9 September 2015 в 21:07