gwt — как я могу запустить ClickEvent в виджете FileUpload?

#gwt #file-upload

#gwt #загрузка файла

Вопрос:

Я пытаюсь создать простую кнопку, и при нажатии на нее я хочу запустить скрытый виджет FileUpload, который находится внутри FormPanel. До сих пор я делал две вещи:

  1. Я создал встроенную функцию javascript, которая щелкает элемент виджета FileUpload при нажатии простой кнопки. Это отлично работает в Firefox, но не работает в Chrome.
  2. Кроме того, я создал это: nativeEvent nevent = Document.get().createFocusEvent();// Я пробовал и createclickEvent() тоже.
    DomEvent.fireNativeEvent (nevent, fileUploadWidget); Это вообще не работает.

Кто-нибудь может мне помочь, пожалуйста??? Я много искал, но не нашел ничего работающего.

Ответ №1:

 myFileUpload.getElement().<InputElement>cast().click()
  

это то, что вы ищете.

Чтобы он работал в браузерах на основе WebKit (Chrome, Safari), FileUpload должен быть «выведен из поля зрения», но не скрыт (как в setVisible(false) , который устанавливает для display свойства CSS значение none ), т.Е. что-то вроде (в CSS): position:absolute; top: -1000px; left: -1000px;

Ответ №2:

Я считаю, что ответ Томаса Бройера устарел. Я только что успешно использовал myFileUpload.click() без проблем.

Я также использовал setVisible(false) в FileUpload поле, и это работает в Chrome. Не тестировался в Safari, но, похоже, теперь эти проблемы решены.

Комментарии:

1. Я использую SDM целую вечность, и он отлично работает в Chrome и FF

Ответ №3:

Вы также можете использовать JSNI следующим образом:

 private native void triggerClick(Element e) /*-{
    e.click();
}-*/;
  

Затем вызовите

 triggerClick(fileInput.getElement());