Я пытаюсь вызвать событие click на input type="file" нажатием другой кнопки.
Демо: http://jsfiddle.net/Y85g6/
Он отлично работает во всех браузерах, кроме браузеров Safari в Mac, Ipad и Iphone.
Есть ли уловка для выполнения этой задачи?
Я пытаюсь вызвать событие click на input type="file" нажатием другой кнопки.
Демо: http://jsfiddle.net/Y85g6/
Он отлично работает во всех браузерах, кроме браузеров Safari в Mac, Ipad и Iphone.
Есть ли уловка для выполнения этой задачи?
Найдена альтернатива.
Просто поместите ввод type="file"
поверх пользовательской кнопки, выполнив абсолютное позиционирование и используйте jQuery fadeTo('fast',0)
, чтобы скрыть его.
Теперь, если мы щелкнем по пользовательской кнопке, появится окно браузера.
Работает во всех настольных браузерах, но не в iPhone
и iPad
, так как они не позволяют загружать файлы.
Вместо trigger("click")
вы можете использовать следующий код, который успешно работает во всех браузерах:
var evt = document.createEvent("HTMLEvents");
evt.initEvent("click", true, true);
document.getElementById(elem_id).dispatchEvent(evt);
сделать элемент видимым, поскольку событие триггера не работает с скрытыми элементами в сафари Mac.
Браузеры могут быть очень изящными, когда речь идет о взаимодействиях JavaScript с файловыми входами по соображениям безопасности. Safari не позволяет вам запускать любые события кликов на них. Некоторые версии Chrome и Firefox также имеют это ограничение. Это было ранее обсуждалось здесь.
Лучше использовать CSS вместо JS, чтобы скрыть элемент, потому что он будет отображать ваш элемент как скрытый напрямую.
Следующий подход помогло:
$(".upload_on_click").each(function(index) {
var form = $(this).next("form");
//form.hide(); /* THIS TECHNIQUE DIDN'T WORK IN SAFARI */
form.css("position", "absolute");
form.css("visibility", "hidden");
$(this).css("cursor", "pointer");
$(this).click(function() {
$('input[type="file"]', form).trigger("click");
});
$('input[type="file"]', form).change(function() {
$('input[type="submit"]', form).trigger("click");
});
});
Не уверен, что кто-то читает этот вопрос больше, но у меня недавно была аналогичная проблема с Safari, поэтому я подумал, что хочу поделиться.
Во-первых, как упоминалось ceejayoz, см. обсуждение здесь: В JavaScript я могу сделать событие "click" программным способом для элемента ввода файла?
Тогда решение, если вы не хотите использовать позиционирование кнопок, должно отображать кнопку ввода файла (удалить "display: none;" ) и вместо этого скрыть его с помощью "opacity: 0;". Возможно, вы также захотите установить абсолютное положение, чтобы оно не взаимодействовало с другими элементами. В любом случае, вы все равно можете использовать JS для активации ввода файла во всех браузерах.
.click() не поддерживается в Safari. Предложение Сатту должно работать. Но вам не нужен Javascript для настройки кнопки ввода файла.
<label><input type="file" id="file" name="file" style="position:absolute; left:-9999px;" />Upload</label>
Ссылка: http://noypiscripter.blogspot.com/2014/04/simplest-cross-browser-custom-upload.html
Я получил самый простой ответ для этого
opacity : 0.01
в элементе входного файла
просто удалите "display: none" и используйте "видимость: скрытый" и работайте с перекрестным браузером.
Попробуйте загрузить script в нижнем колонтитуле. У меня была аналогичная проблема несколько раз, и это сделало трюк.