javascript - 取消输入类型 ="file"上的事件隐藏

标签 javascript reactjs file-upload

我已阅读 Cancel event on input type="file" ,但是当输入标签被隐藏时这不起作用,焦点不会转到输入标签。
我希望在操作系统文件选择器关闭时重新呈现按钮 - a。在选择任何文件之后,b。无需选择文件并单击取消按钮
useState/useForceUpdate/useReducerButton.onClickinput.onChange|onClick事件在用户实际选择文件时起作用,但在用户单击取消按钮而不选择文件(或当用户使用键盘单击 Esc 键时)时“不”。input.onFocus没有触发。当用户在没有选择文件的情况下关闭文件选择器(取消/Esc 键)时,有没有办法重新渲染按钮?

const [, forceUpdate] = React.useReducer((x) => x + 1, 0);

return (
    <>
        <input
            type="file"
            ref={uploadRef}
            id={`${toolbarButtonId}`}
            accept={acceptParams}
            onChange={onClickEvent}
            onClick={onClick}
            hidden
            onFocus={forceUpdate}
        />
        <Button
            ariaLabel={ariaLabel}
            ariaDescription={ariaDescription}
            disabled={disabled}
            iconName={iconName}
            id={toolbarButtonId}
            position={position}
            onClick={fileUploadRefLink}
            {...props}
        />
    </>
);

最佳答案

您可以在窗口上添加一个焦点事件,以便在用户关闭文件输入对话框后重新获得焦点时进行观察。

let button = document.querySelector("button");
let input = document.querySelector("input");

let renderCount = 0;
    
let pageRefocused =  () => {
  button.textContent = `User closed the dialog ${++renderCount} times`;
  window.removeEventListener("focus", pageRefocused);
};

button.addEventListener("click", () => {
  input.click();
  // we watch the window after opening the file input dialog
  window.addEventListener("focus",pageRefocused); 
});
input {
  visibility:hidden;
}
<button>Upload a file</button><input type="file">

关于javascript - 取消输入类型 ="file"上的事件隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67999065/

相关文章:

javascript - 在 javascript 中,我无法弄清楚如何使正则表达式仅替换捕获而不替换匹配

javascript - 如何删除悬停项上的 jquery 缓存

node.js - 如何使用 React + Webpack 应用程序存储和访问我的 API key ?

xcode - React Native - 如何在 DEV = FALSE 的情况下从 xcode 在 iOS 设备上运行

javascript - Dropzone.js 与其他表单结合 - html5 需要验证

php - 即使在上传新图像后仍显示旧图像

php - 在 PHP 中上传多个文件

javascript - 我想从一个复选框中选中我的所有复选框

javascript - 当焦点离开 div 中的所有子链接时,触发事件

javascript - 如何在 ReactJS 中丑化生产代码?