Как выбрать каталог для создания текстового файла [duplicate]

Указание типа как строки в порядке, но всегда немного меня решает, что мы в основном обходим парсер. Поэтому вам лучше не пропустить ни одну из этих литералов:

def __add__(self, other: 'Position') -> 'Position':
    return Position(self.x + other.x, self.y + other.y)

Небольшое отклонение заключается в использовании связанного типаvar, по крайней мере, тогда вы должны написать строку только один раз при объявлении typevar:

from typing import TypeVar

T = TypeVar('T', bound='Position')

class Position:

    def __init__(self, x: int, y: int):
        self.x = x
        self.y = y

    def __add__(self, other: T) -> T:
        return Position(self.x + other.x, self.y + other.y)
44
задан Click Upvote 24 June 2011 в 05:38
поделиться

9 ответов

Это решение, отличное от jQuery. Обратите внимание, что вы не можете просто использовать .click(), поскольку некоторые браузеры не поддерживают его.

<script type="text/javascript">
function performClick(elemId) {
   var elem = document.getElementById(elemId);
   if(elem && document.createEvent) {
      var evt = document.createEvent("MouseEvents");
      evt.initEvent("click", true, false);
      elem.dispatchEvent(evt);
   }
}
</script>
<a href="#" onclick="performClick('theFile');">Open file dialog</a>
<input type="file" id="theFile" />
51
ответ дан skia.heliou 18 August 2018 в 17:14
поделиться
  • 1
    Важно отметить, что если вы это сделаете, а затем используйте javascript для отправки формы, например. form.submit () вам будет предоставлен отказ в доступе – nuander 1 June 2012 в 16:57
  • 2
    @nuander см. связанные: stackoverflow.com/questions/3935001/… – Samuel Liew♦ 11 January 2013 в 05:09
  • 3
    (2013) вы можете использовать .click() все современные браузеры (включая ie10), поддерживающие метод .click() jsfiddle.net/vnYVB . Не используйте display:none на input type:file, потому что это не будет работать на сафари. Чтобы исправить эту проблему сафари, вы должны использовать position:fixed;top:-1000, чтобы скрыть input type:file. (Я знаю, что это старый, но этот пост занимает высокое место в поисковых системах и может ввести в заблуждение прохожих) – Jo E. 1 August 2013 в 12:35
  • 4
    я ошибаюсь или должен быть elem.dispatchEvent(...) вместо node.dispatchEvent(...) – Richard Hutta 12 January 2015 в 14:41
  • 5
    Если кто-то еще сталкивается с этой проблемой, кажется, что, по крайней мере, некоторые браузеры / ОС требуют, чтобы инициированное пользователем событие было в стеке вызовов, чтобы оно срабатывало. Поэтому вызов вручную (или даже в консоли) не будет работать. – Fewfre 3 June 2015 в 15:45

Как сделать клик по тегу, щелкнуть по кнопке файла?

Для этого есть дополнительная поддержка браузера, но я использую 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" />

0
ответ дан Alireza 18 August 2018 в 17:14
поделиться

Используйте это.

<script>
  function openFileOption()
{
  document.getElementById("file1").click();
}
</script>
     <input type="file" id="file1" style="display:none">
     <a href="#" onclick="openFileOption();return;">open File Dialog</a>
16
ответ дан birendra 18 August 2018 в 17:14
поделиться
  • 1
    display: none, похоже, не работает в Safari. Может быть, вы должны поместить его в div с overflow: hidden; и установить position: relative; top: -1000px на вход? – Zachary Dahan 17 September 2015 в 11:24
  • 2
    не работает. Зачем? – Eliyah 5 November 2015 в 04:46

Создайте элемент ввода.

. Отсутствие этих ответов заключается в том, как получить диалог файла без входного элемента на странице.

Функция для отображения диалогового окна входного файла.

function openFileDialog (accept, callback) {  // this function must be called from  a user
                                              // activation event (ie an onclick event)

    // Create an input element
    var inputElement = document.createElement("input");

    // Set its type to file
    inputElement.type = "file";

    // Set accept to the file types you want the user to select. 
    // Include both the file extension and the mime type
    inputElement.accept = accept;

    // set onchange event to call callback when user has selected file
    inputElement.addEventListener("change", callback)

    // dispatch a click event to open the file dialog
    inputElement.dispatchEvent(new MouseEvent("click")); 
}

ПРИМЕЧАНИЕ. Функция должна быть частью активации пользователя, такого как событие click.

ПРИМЕЧАНИЕ input.accept не используется в Edge

Пример.

Вызов выше когда пользователь нажимает на якорный элемент.

// wait for window to load
window.addEventListener("load", windowLoad);

// open a dialog function
function openFileDialog (accept, multy = false, callback) { 
    var inputElement = document.createElement("input");
    inputElement.type = "file";
    inputElement.accept = accept; // Note Edge does not support this attribute
    if (multy) {
        inputElement.multiple = multy;
    }
    if (typeof callback === "function") {
         inputElement.addEventListener("change", callback);
    }
    inputElement.dispatchEvent(new MouseEvent("click")); 
}

// onload event
function windowLoad () {
    // add user click event to userbutton
    userButton.addEventListener("click", openDialogClick);
}

// userButton click event
function openDialogClick () {
    // open file dialog for text files
    openFileDialog(".txt,text/plain", true, fileDialogChanged);
}

// file dialog onchange event handler
function fileDialogChanged (event) {
    [...this.files].forEach(file => {
        var div = document.createElement("div");
        div.className = "fileList common";
        div.textContent = file.name;
        userSelectedFiles.appendChild(div);
    });
}
.common {
    font-family: sans-serif;
    padding: 2px;
    margin : 2px;
    border-radius: 4px;
 }
.fileList {
    background: #229;
    color: white;
}
#userButton {
    background: #999;
    color: #000;
    width: 8em;
    text-align: center;
    cursor: pointer;
}

#userButton:hover {
   background : #4A4;
   color : white;
}
<a id = "userButton" class = "common" title = "Click to open file selection dialog">Open file dialog</a>
<div id = "userSelectedFiles" class = "common"></div>

Предупреждение о том, что приведенный выше фрагмент написан на ES6.

7
ответ дан Blindman67 18 August 2018 в 17:14
поделиться

К сожалению, нет хорошего способа просмотра файлов с помощью JavaScript API. К счастью, легко создать ввод файла в JavaScript, привязать обработчик событий к его событию change и имитировать щелчок на нем пользователя. Мы можем сделать это без изменений самой страницы:

$('<input type="file" multiple>').on('change', function () {
  console.log(this.files);
}).click();

this.files во второй строке - это массив, который содержит имя файла, временные метки, размер и тип.

11
ответ дан Brad 18 August 2018 в 17:14
поделиться

Я знаю, что это старый пост, но другой простой вариант - использовать тег INPUT TYPE = "FILE" в соответствии с совместимостью с большинством основных браузеров.

0
ответ дан JJ. 18 August 2018 в 17:14
поделиться
  • 1
    это не то, что задает вопрос – Omar Meky 11 March 2015 в 14:04
  • 2
    это общий путь, но вопрос заключается в том, чтобы открыть его "сторонний" без отображения файла типа ввода. – Kalaschni 9 June 2015 в 11:47

Вот способ сделать это без Javascript, и он также совместим с любым браузером.


EDIT: в Safari input отключается, когда скрывается с помощью display: none. Лучшим подходом было бы использовать position: fixed; top: -100em.


<label>
  Open file dialog
  <input type="file" style="position: fixed; top: -100em">
</label>

Кроме того, если вы предпочитаете, вы можете пойти «правильный путь» , используя for в label, указывающий на id входа следующим образом:

<label for="inputId">file dialog</label>
<input id="inputId" type="file" style="position: fixed; top: -100em">
9
ответ дан JP de la Torre 18 August 2018 в 17:14
поделиться
  • 1
    Умная идея, но, похоже, несовместима с Safari ... – Zachary Dahan 16 September 2015 в 19:34
  • 2
    @Stuffix Я читал это потому, что Safari предотвратит работу скрытых входов. Обходным путем было бы скрыть его перемещение из поля зрения с помощью position: fixed; top: -100em; или margin-top: -2em и с overflow: hidden в метке. – JP de la Torre 26 September 2015 в 01:14

Я работал над этим «скрывающим» div ...

<div STYLE="position:absolute;display:none;"><INPUT type='file' id='file1' name='files[]'></div>
0
ответ дан Sandro Rosa 18 August 2018 в 17:14
поделиться

вы не можете использовать input.click() напрямую, но вы можете вызвать это в другом событии щелчка элемента.

var a = document.querySelector('a');
var inpupt = document.querySelector('a');
a.addEventListener('click', function (e) {
    input.click();
});

это говорит вам Использование элементов ввода скрытого файла с помощью кнопки click () метод

1
ответ дан xavierskip 18 August 2018 в 17:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: