javascript - MouseEvent用javascript模拟onclick事件
问题描述
我正在尝试模拟鼠标单击,它正在单击导航栏上的按钮,
但是当点击我侧边栏上的按钮时它不起作用。
我在侧边栏中的按钮是一个深度嵌套的按钮,我觉得这就是问题所在。
我曾尝试使用 cancelBubble: true 但它什么也没做。当我记录 MouseEvent 时,我得到:cancelBubble:false。
当我放气泡时:false 我的导航栏上的点击事件不起作用。
我已经阅读了很多关于 stopPropagation 的内容,但我不知道这是否适用于我的代码。以及把它放在哪里我试图把它放在我的函数中的不同位置,比如 const el 变量,但我得到了错误
我的应用程序是一个反应应用程序。我的点击功能来自香草 javascript 脚本。有人能指出我正确的方向吗?
提前致谢
click.js javascript 点击函数
function click(x, y) {
const ev = new MouseEvent("click", {
view: window,
bubbles: true,
//cancelBubble:true,
cancelable: true,
screenX: x,
screenY: y,
});
const el = document.elementFromPoint(x, y);
console.log(el); //print element to console
if (el !== null || undefined) el.dispatchEvent(ev);
}
click(x,y);
反应 APP.js
function App(props) {
const [sidebarIsOpen, setSidebarIsOpen] = useState(false);
// useSelector a function that brings us Redux store
const cart = useSelector((state) => state.cart);
const { cartItems } = cart;
const productCategoryList = useSelector((state) => state.productCategoryList);
const {
loading: loadingCategories,
error: errorCategories,
categories,
} = productCategoryList;
const userSignin = useSelector((state) => state.userSignin);
const { userInfo } = userSignin;
const dispatch = useDispatch();
const signoutHandler = () => {
dispatch(signout());
};
useEffect(() => {
dispatch(listProductCategories());
}, [dispatch]);
return (
<>
<BrowserRouter>
<div className="grid-container">
<header className="row">
//THIS WORKS WHEN CLICK
//WHEN CLICK I GET BACK THIS:<i className="fa fa-bars">...</i>
<div>
<button
type="button"
className="open-sidebar"
onClick={() => (
console.log("open sidebare"), setSidebarIsOpen(true)
)}
>
<i className="fa fa-bars"></i>
</button>
<Link className="brand" to="/">
Logo
</Link>
</div>
<div>
<Route
render={({ history }) => <SearchBox history={history} />}
/>
</div>
<div className="div-dropdown">
<Link to="/search/name">
Shop
{cartItems.length > 0 && (
<span className="badge">{cartItems.length}</span>
)}
</Link>
<Link to="/cart">
Cart
{cartItems.length > 0 && (
<span className="badge">{cartItems.length}</span>
)}
</Link>
{userInfo ? (
<div className="dropdown">
<Link to="#">
{userInfo.name} <i className="fa fa-caret-down"></i>
</Link>
<ul className="dropdown-content">
<li>
<Link to="/profile">User Profile</Link>
</li>
<li>
<Link to="/orderhistory">Order History</Link>
</li>
<li>
<Link to="/" onClick={signoutHandler}>
Sign Out
</Link>
</li>
</ul>
</div>
) : (
<Link to="/signin">Sign In</Link>
)}
{userInfo && userInfo.isSeller && (
<div className="dropdown">
<Link to="#seller">
Seller <i className="fa fa-caret-down"></i>
</Link>
<ul className="dropdown-content">
<li>
<Link to="/productlist/seller">Products</Link>
</li>
<li>
<Link to="/orderlist/seller">Orders</Link>
</li>
</ul>
</div>
)}
{userInfo && userInfo.isAdmin && (
<div className="dropdown">
<Link to="#admin">
Admin <i className="fa fa-caret-down"></i>
</Link>
<ul className="dropdown-content">
<li>
<Link to="/dashboard">Dashboard</Link>{" "}
</li>
<li>
<Link to="/productlist">Products</Link>
</li>
<li>
<Link to="/orderlist">Orders</Link>
</li>
<li>
<Link to="/userlist">User</Link>
</li>
</ul>
</div>
)}
</div>
</header>
//WHEN CLICK I GET BACK THIS:<aside className="open">...</aside>
<aside className={sidebarIsOpen ? "open" : ""}>
<ul className="categories">
<li>
<strong>Categories</strong>
//THIS DONT WORK WHEN CLICK
<button
className="close-sidebar"
type="button"
onClick={(e) => setSidebarIsOpen(false)}
>
<i className="fa fa-close"></i>
</button>
</li>
{loadingCategories ? (
<LoadingBox></LoadingBox>
) : errorCategories ? (
<MessageBox variant="danger">{errorCategories}</MessageBox>
) : (
categories.map((c) => (
<li key={c}>
<Link
to={`/search/category/${c}`}
onClick={() => setSidebarIsOpen(false)}
>
{c}
</Link>
</li>
))
)}
</ul>
</aside>
<main>
<Route path="/" component={Home} exact />
<div className="route-div">
<Route path="/cart/:id?" component={Cart} />
<Route path="/product/:id" component={Product} exact />
<Route
path="/product/:id/edit"
component={ProductEdit}
exact
/>
<Route path="/register" component={Register} />
<Route path="/signin" component={Signin} />
</div>
</main>
<footer className="row center">All rights reserved</footer>
</div>
</BrowserRouter>
</>
);
}
export default App;
解决方案
推荐阅读
- php - 将 CSS 文件包含到 mpdf
- bash - 有没有办法只使用厨师编辑 /etc/passwd 文件上的 GID?
- javascript - sendBeacon 在 beforeunload 处理程序中不起作用
- angular - Angular 依赖项最佳实践 - 是否可以在 component.html 中引用 ts 文件而不是其 component.ts?
- javascript - HTML、CS、JS 中的移动弹出窗口
- angularjs - 错误:未捕获(承诺):TypeError:PlotlyService_1._plotly.purge 不是函数
- java - 如何在我的位置跟踪应用程序中移动 GPS 距离?安卓、java
- javascript - 待办事项列表的本地存储问题
- javascript - 检查自定义协议是否存在
- javascript - 如何停止正在运行的 setInterval