Я бы хотел, чтобы событие щелчка вызывало <input type="file">
метку программно.
Просто вызов click () ничего не делает или, по крайней мере, не вызывает диалог выбора файла.
Я экспериментировал с захватом событий с использованием прослушивателей и перенаправлением события, но я не смог получить это, чтобы фактически выполнить событие, как кто-то нажал на него.
javascript
html
user28655
источник
источник
Ответы:
Вы не можете делать , что во всех браузерах, предположительно IE это позволить, но Mozilla и Opera нет.
Когда вы создаете сообщение в GMail, функция «прикрепить файлы» реализуется одним способом для IE и любого браузера, который поддерживает это, а затем реализует другой способ для Firefox и тех браузеров, которые этого не делают.
Я не знаю, почему вы не можете сделать это, но одна вещь, которая представляет угрозу безопасности и которую вам нельзя делать в любом браузере, это программно установить имя файла в элементе HTML-файла.
источник
input
видим ли элемент файла . Запускclick
метода работает, в том числе и в консоли, если элемент виден.Я искал решение для всего этого дня. И вот выводы, которые я сделал:
Надеюсь это поможет! :)
источник
Вы можете запустить click () в любом браузере, но в некоторых браузерах этот элемент должен быть видимым и сфокусированным. Вот пример jQuery:
Он работает с Hide раньше,
click()
но я не знаю, работает ли он без вызова метода show. Никогда не пробовал это на Opera, я тестировал на IE / FF / Safari / Chrome, и это работает. Я надеюсь, это поможет.источник
$(...).show().focus().click().hide();
:)ЭТО ВОЗМОЖНО: под FF4 +, Opera ?, Chrome: но:
inputElement.click()
должен вызываться из контекста действий пользователя! (не контекст выполнения скрипта)<input type="file" />
должно быть видно (inputElement.style.display !== 'none'
) (вы можете скрыть это с помощью видимости или чего-то другого, но не с помощью свойства "display")источник
onclick
атрибуту вместо привязки к событию.inputElement.click()
из события keydown (ярлык для прикрепления файла) работает, но вызов из-за тайм-аута или обратного вызова ajax не сработал. Upvoted.this
. : /Для тех, кто понимает, что вам нужно наложить невидимую форму на ссылку, но лень писать, я написал ее для вас. Ну, для меня, но может также поделиться. Комментарии приветствуются.
HTML (где-то):
HTML (где вам все равно):
JavaScript:
источник
Попробуйте это решение: http://code.google.com/p/upload-at-click/
источник
просто используйте тег метки, чтобы вы могли скрыть ввод и заставить его работать через связанный ярлык https://developer.mozilla.org/fr/docs/Web/HTML/Element/Label
источник
Если вы хотите, чтобы
click
метод работал в Chrome, Firefox и т. Д., Примените следующий стиль к своему входному файлу. Это будет совершенно скрыто, как будто вы делаетеdisplay: none;
Это так просто, я проверил это работает!
источник
height
иwidth
до0
?Работал на меня, когда столкнулся с подобной проблемой, это обычный eRube Goldberg.
источник
Позвольте мне добавить к этому старому посту рабочее решение, которое я использовал, которое работает, вероятно, в 80% и более браузеров, как новых, так и старых.
Решение сложное, но простое. Первый шаг - использовать CSS и скрыть тип входного файла с «недоэлементами», которые видны сквозь, поскольку у него непрозрачность 0. Следующий шаг - использовать JavaScript для обновления своей метки по мере необходимости.
Рабочий пример jsFiddle
источник
Оно работает :
По соображениям безопасности в Firefox и Opera вы не можете выполнить щелчок при вводе файла, но вы можете смоделировать с помощью MouseEvents:
источник
createEvent()
иinitMouseEvent()
теперь устарели.Я знаю, что это старое, и все эти решения являются мошенничеством вокруг мер безопасности браузера с реальной ценностью.
Тем не менее, на сегодняшний день fileInput.click () работает в текущем Chrome (36.0.1985.125 м) и текущем Firefox ESR (24.7.0), но не в текущем IE (11.0.9600.17207). Наложение поля файла с непрозрачностью 0 поверх кнопки работает, но я хотел, чтобы элемент ссылки был видимым триггером, а подчеркивание при наведении курсора не вполне работает ни в одном браузере. Он мигает, а затем исчезает, вероятно, браузер выясняет, действительно ли применяется стиль наведения мыши или нет.
Но я нашел решение, которое работает во всех этих браузерах. Я не буду утверждать, что проверил каждую версию каждого браузера или знаю, что он будет работать вечно, но теперь он отвечает моим потребностям.
Все просто: поместите поле ввода файла за пределы экрана (позиция: абсолютная; верх: -5000px), поместите элемент метки вокруг него и запустите щелчок на метке вместо самого поля файла.
Обратите внимание, что для вызова метода click метки ссылка должна быть написана в сценарии, она не делает этого автоматически, например, когда вы нажимаете на текст внутри элемента метки. Видимо, элемент ссылки фиксирует щелчок, и он не попадает на ярлык.
Также обратите внимание, что это не предоставляет способ показать текущий выбранный файл, так как поле находится вне экрана. Я хотел отправить сразу же, когда файл был выбран, так что это не проблема для меня, но вам понадобится несколько иной подход, если ваша ситуация отличается.
источник
JS Fiddle: http://jsfiddle.net/eyedean/1bw357kw/
источник
Этот код работает для меня. Это то, что вы пытаетесь сделать?
источник
Мое решение для Safari с jQuery и jQuery-ui:
источник
Вот чистое решение этой проблемы на JavaScript. Хорошо работает во всех браузерах
источник
Существуют способы перенаправления событий на элемент управления, но вы не ожидаете, что сможете самостоятельно запускать события для элемента управления, поскольку браузеры попытаются заблокировать это по (хорошим) причинам безопасности.
Если вам нужно, чтобы диалоговое окно файла отображалось только тогда, когда пользователь что-то щелкает, скажем, потому, что вам нужны более удобные кнопки загрузки файлов, вы можете взглянуть на то, что придумал Шон Инман. .
Мне удалось добиться запуска клавиатуры с помощью творческого смещения фокуса между событиями нажатия клавиш, нажатия клавиш и нажатия клавиш. YMMV.
Мой искренний совет - оставить это в покое, потому что это мир боли несовместимости браузера. Незначительные обновления браузера также могут блокировать уловки без предупреждения, и вам, возможно, придется постоянно изобретать хаки, чтобы они работали.
источник
Я исследовал это некоторое время назад, потому что я хотел создать пользовательскую кнопку, которая открывала бы диалог файла и немедленно начинала загрузку. Я только что заметил кое-что, что могло бы сделать это возможным - Firefox, кажется, открывает диалоговое окно, когда вы щелкаете в любом месте загрузки. Таким образом, следующее может сделать это:
Это только теоретически, так как я уже использовал другой метод для решения проблемы, но это может сработать.
источник
У меня был
<input type="button">
тег, скрытый от глаз. Я прикрепил"onClick"
событие к любому видимому компоненту любого типа, например к метке. Это было сделано с помощью инструментов разработчика Google Chrome или Firebug Mozilla Firefox с помощью правой кнопки мыши «изменить HTML». В этом случае укажите следующий скрипт или что-то подобное:Если у вас есть JQuery:
если не:
Спасибо.
источник
Эй, это решение работает. для загрузки мы должны использовать MSBLOB
Для AngularJS или даже для обычного JavaScript.
источник
Теперь это станет возможным в Firefox 4 с предупреждением о том, что оно считается всплывающим окном и поэтому будет блокироваться всякий раз, когда всплывающее окно было бы.
источник
Вот решение, которое работает для меня: CSS:
HTML с «маленькой» справкой JQuery:
Просто убедитесь, что maskfied полностью покрыт полем загрузки.
источник
Вы можете сделать это согласно ответу из диалогового окна «Открыть файл» на теге <a>
источник
Я обнаружил, что если вход (файл) находится за пределами формы, то событие щелчка запуска вызывает диалог файла.
источник
Надеюсь, это кому-то поможет - я провел 2 часа, стуча головой об это:
В IE8 или IE9, если вы вообще инициируете открытие ввода файла с помощью javascript (поверьте мне, я пробовал их все), это не позволит вам отправить форму с использованием javascript, просто произойдет сбой в молчании.
Отправка формы с помощью обычной кнопки отправки может работать, но вызов form.submit (); молча провалится.
Мне пришлось прибегнуть к наложению кнопки выбора файла на прозрачный файл, который работает.
источник
Это сработало для меня:
источник
это не невозможно
Но так или иначе это работает, только если это находится в функции, которая была вызвана через событие click.
Таким образом, вы можете иметь следующую настройку:
HTML:
JavaScript:
источник
createEvent()
ИinitMouseEvent()
были устаревшими. Вы должны использоватьCustomEvent()
сейчас ...Ты можешь использовать
источник