```html:preview
Open dialog
// TODO: This doesn't work because of Dialog / keymanager issues
```
## Selected files
You can get the selected files by:
### Widget value
If the dialog is in the template, it will return values on submit back to the server.
### Change event
When the selected file(s) change, the change event is fired
```js
const dialog = this.et2.getWidgetById("files");
dialog.addEventListener("change", this.handleFilesSelected);
```
### getComplete() Promise
When the user closes the dialog, getComplete() will return the selected files.
```js
const dialog = this.et2.getWidgetById("files");
let [button, files] = await dialog.getComplete();
```
This is probably the best way to get files (or directories) that you then want to do something with on the client. See
also [Et2VfsSelectButton](../et2-vfs-select) which can pass the files to take action on the server.