OnClick 触发另一个按钮单击事件

2024-06-21

由于某种原因,在我的代码中onClick活动为disableAccount每当我单击取消按钮时,按钮就会被激活。所以取消设置isEditMode为假但是disableAccount将其设置回 true,从而防止我在 UI 中看到任何明显的变化。这是一个 next.js 项目。

import React from 'react';
import TextInput from '../Input/TextInput';
import SmallButton from '../Buttons/SmallButton';

const DisableAccountForm = ({t, tc, onSubmit, password, setPassword, isEditMode, setIsEditMode}) => {
  return (
    <label className="block w-full max-w-xl text-2xl mb-4">
      {t("admin")}
      <form onSubmit={onSubmit} className="w-full max-w-xl text-base mt-2">
        <p className="mb-4">
          {t("disableP")}
        </p>
        {isEditMode ?
          <div>
            <p className="mb-4">
              {t("youSureP")}
            </p>
            <p className="text-sm mb-4">
              {t("enterPasswordP")}
            </p>

          </div>
          : null
        }


        {isEditMode ? 
          <label className="flex-col">
            {tc("password")}
            <TextInput 
              placeholder={tc("password")}
              value={password}
              onChange={e=>setPassword(e.target.value)}
              style="m-1"
              required
            />
            <SmallButton 
              type="submit"
              label={tc("submit")}
              color='bg-blue-500' 
              textColor='text-white'
            />
            <SmallButton 
              type="button"
              label={tc("cancel")}
              color='bg-red-500' 
              textColor='text-white'
              onClick={() => {console.log("cancel"); setIsEditMode(false)}}
            />
          </label> 
          :
          <SmallButton 
            type="button"
            label={t("disableAccount")}
            color='bg-blue-500' 
            textColor='text-white'
            onClick={() => {console.log("why"); setIsEditMode(true)}}
          />
        }
      </form>
    </label>
  );
}

export default DisableAccountForm;

这是上面代码的控制器。

import React, {useState} from 'react';
import DisableAccountForm from '../components/DisableAccountForm/DisableAccountForm';

const DisableAccountController = ({t, tc, onSubmit}) => {
  const [password, setPassword] = useState("");
  const [isEditMode, setIsEditMode] = useState(false);

  const disableAccount = (e) => {
    e.preventDefault();
    console.log("disableAccount");
    setIsEditMode(false);
  }

  return (
    <DisableAccountForm 
    t={t}
    tc={tc}
    onSubmit={disableAccount}
    password={password}
    setPassword={setPassword}
    isEditMode={isEditMode}
    setIsEditMode={setIsEditMode}
    />
  );
}

export default DisableAccountController;

小按钮

import React from 'react';

const SmallButton = ({type, label, color, textColor, style, onClick}) => {
  return (
    <button 
      type={type} 
      className={`m-1 ${color} hover:ring-2 rounded-md px-2 py-1 min-w-20 ${textColor} ${style}`}
      onClick={onClick}
    >
      {label}
    </button>
  );
}

export default SmallButton;

TL;DR

问题是label表单从编辑模式切换到显示模式后,包装器立即“单击”禁用帐户按钮。这是 HTML 的默认行为label元素。您可以通过更改来解决label to div或片段或任何其他不会点击您的按钮的包装器。

详细解释

转到您发布的沙箱。它以显示模式(不是编辑模式)打开。现在,按顶部的文本“管理员”。正如您所看到的,“禁用帐户”按钮被按下 - 这肯定不是预期的行为。

发生这种意外行为的原因与取消按钮切换回编辑模式的原因相同。整个问题是关于label包裹表格。HTML 原生label element https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label附加附近或内部的可点击元素之一的点击事件label到里面的内容label。在显示模式下,label检测“禁用帐户”按钮并将其单击事件附加到整个组件。

因此,当您单击“取消”按钮时 - 组件切换到编辑模式,并且label包装器“单击”“禁用帐户”按钮并将其切换回编辑模式。提交表单时您看不到它,因为您阻止了label的默认行为onSubmit打回来。您的问题的部分解决方案可以是preventDefault也在取消回调中 - 但它会使文本保持可点击状态。另一个解决方案可能是改变label to div或片段或任何其他不会点击您的按钮的包装器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OnClick 触发另一个按钮单击事件 的相关文章

  • React-native:发送日志时出现问题 - console.error

    我正在使用 Expo React Native 我正在尝试使用 axios 向我的 Express 服务器发送 POST 请求 App js 在我的 React 中 Axios url http 172 20 1 19 3001 api t
  • Material UI 自动完成:将值与状态同步

    如何存储值Material UI 的自动完成 https material ui com components autocomplete 进入React的状态 自动完成使用多选并具有字符串数组作为值 功能组件示例 在此示例中 我们将显示一个
  • 在 jsx 中使用地图内的地图

    normalizedData map obj gt div div obj display date numberic div div isEmpty obj applicants obj map obj2 gt div obj2 pers
  • 在 React 应用程序中导入 CSS

    In the 创建反应应用程序 https github com facebook create react app文档显示 App css 已导入到 App js 中 还有一种方法可以从组件加载编译后的 css 文件吗 我的视图组件 im
  • Material UI + 酶测组件

    我在 React 中有一个组件 我正在尝试用 Jest 测试它 不幸的是测试没有通过 组件代码 import React Component from react import ProductItem from ProductItem Pr
  • 在react.js上下文中获取html元素的数据属性

    CMS 将变量作为 data rest url 属性传递给 React js 应用程序 div div 如果我将 jQuery 添加到我的 React js 应用程序中 那么我可以简单地 componentWillMount const r
  • React - 防止标签切换时焦点脱离模式

    我自己构建了一个反应模式 当我在模式打开时按 Tab 键时 焦点仍然转到背景页面 如何将焦点限制在模态框内的组件内 下面的逻辑应该是什么 onKeyPress e if e keyCode 9 e preventDefault logic
  • 如何更改 React 项目中的生产构建静态文件夹路径?

    我有一个React我运行的项目npm run build它为我制作了一个生产版本 问题是它给了我注入以下样式表index html 可以看到 设置的路径是 static js 但我希望将路径设置为 static dashboard js 5
  • 在节点模块文件夹中编辑react npm模块的代码

    是否可以更改 module 文件夹中 npm 模块的代码 我认为这不是推荐的做法 还有其他方法可以实现这一目标吗 目前 我尝试更改模块目录中的代码 但更改似乎并不适用 提前致谢 当然你可以改变包的内容node modules因为它是标准化格
  • 不将所有依赖项包含在 useEffect 依赖项数组中是不是一种反模式?

    我正在尝试了解 React Hooks API 具体来说 我正在尝试构建曾经如下的经典用例 componentDidUpdate prevProps if prevProps foo this props foo Animate DOM e
  • 如何禁用和隐藏反应表的分页页脚?

    我是反应表的新手 目前 我有一个 5 行表要在反应表上渲染 并且不需要分页功能 我了解关闭分页 可以通过以下方式完成 pagination false 但是分页控件仍然显示 有办法隐藏它吗 我刚刚找到道具showPagination fal
  • React 将图像 src 作为对象返回

    我有一个这样定义的变量 const team name Foo bio FooBar image foo name Bar bio FooBar image bar 图像导入的位置如下 import foo from assets foo
  • React Native动态webview高度

    我有 WebView 内容 它根据内容量改变它的高度 所以我找到了一种方法 如何通过document title属性onNavigationStateChange来获取内容的高度 看起来像这样 let html 以及 onNavigatio
  • MIME 多部分流意外结束。 MIME 多部分消息不完整。 Web API 和超级代理

    我在将文件从客户端上传到 Web api 时遇到问题 我收到此错误 MIME 多部分流意外结束 MIME 多部分消息不完整 当我尝试读取多部分内容时在控制器中 我正在使用 superagent 构建一个 React JS 客户端 这是我的请
  • 静态类属性不适用于 Babel

    我正在使用 JSDOC 及其所有支持的 npm 插件来创建漂亮的文档 当 jsdoc 运行并解析 JSX 文件时遇到困难 它总是抛出如下错误 sign SyntaxError unknown Unexpected token export
  • Express COR 策略阻止 Apollo 客户端从服务器获取数据

    我正在运行一个反应开发服务器http localhost 3000和一个快递服务器http localhost 8080并使用 Apollo 客户端来查询服务器 为了使会话数据能够从客户端传递到服务器 我添加了credentials inc
  • 使用与打字稿反应来玩笑测试复制到剪贴板方法

    我试图确保当用户单击按钮时将正确的值复制到用户剪贴板 这是我的复制方法 我在输入上使用 ref 来访问正确的值 protected copyToClipboard console log clicked const text this co
  • 将外部脚本嵌入 Next.js 应用程序

    我一直在尝试将外部 JavaScript 源嵌入到我的 Next js 应用程序中 但不断收到以下错误 无法对 文档 执行 写入 无法写入 从异步加载的外部脚本写入文档 除非 它是明确打开的 可以找到我尝试使用的代码here https w
  • 如何使用antd按字母顺序对表进行排序[重复]

    这个问题在这里已经有答案了 我想按字母顺序过滤列 这是按大小过滤的代码 怎么做 谢谢 const columns title First Name dataIndex first name sortDirections descend as
  • 单击反应表时选择行

    我正在尝试找到与我的反应应用程序一起使用的最佳表格 目前 反应表 https www npmjs com package react table提供我需要的一切 分页 服务器端控制 过滤 排序 页脚行 话虽这么说 我似乎无法选择一行 没有e

随机推荐

  • Apache HttpClient 执行时会在所有 HTTP 5XX 错误上抛出 IOException 吗?

    The Apache HttpClient 文档 http hc apache org httpcomponents client ga httpclient apidocs org apache http client HttpClien
  • 在 Pickerview 中创建复选标记[重复]

    这个问题在这里已经有答案了 我正在开发一个应用程序 我想在用户选定的行上创建复选标记 For Ex 在UITableView中有 UITableViewCellAccessoryCheckmark 但我想知道是否有类似的东西可用于 UIPi
  • RealityKit – 从中心缩放模型

    我想就地缩放 3D 模型 一个高大的玩具机器人 即从其中心开始 它应该在所有维度上增大和缩小 而不改变位置 我可以缩放玩具机器人模型 但该模型从其脚部开始放大或缩小 而不是其正确的中心 我尝试过通过缩放model scale 我也尝试过使用
  • 良好的可扩展容错内存数据库,支持 .NET 的 LINQ

    是否有好的内存事务数据库支持 LINQ 和 SQL Server 持久性 我想在内存中创建大型数据存储的完整表示 并以惰性方式将其提交到 SQL Server 数据库 但仍然通过水平扩展来保持一定程度的容错能力 我不想依赖像 CouchDB
  • 如何在 Intellij IDEA 中的实时模板中使用变量值?

    我想为设置器创建实时模板 I ve created this template 我怎样才能使用价值par生成值的变量var多变的 基本上 我想在这里避免冗余 只将变量名称放置一次 其他名称将由某种算法自动生成 UPDATE 我想澄清一下我想
  • 在 Swift 中计算两个 CLLocation 点之间的方位角 [重复]

    这个问题在这里已经有答案了 我正在尝试计算仅 swift 代码中两个 CLLocation 点之间的方位 我遇到了一些困难 并假设这是一个非常简单的函数 堆栈溢出似乎没有列出任何内容 func d2r degrees Double gt D
  • 读取存储在注册表中的 GUID 值

    我尝试读取存储为的 GUID 值binaryDelphi 注册表中的值 当我用BintoHex读取它时 但结果是相反的 看来我必须交换字节 但我认为 BinToHex 可以做到 我参考了这个线程 但找不到正确的解决方案 如何在 Delphi
  • 处理器关联组 C#

    我使用的是 72 核的 Windows Server 2016 我看到有两组处理器 我的 net 应用程序将使用一个或其他组 我需要能够强制我的应用程序使用我选择的组 我看到下面的代码示例 但我无法使其工作 我可能传递了错误的变量 我希望应
  • -[_SwiftValueencodeWithCoder:]:无法识别的选择器发送到实例

    尝试使用 NSCoder 时出现错误 玩家 swift class Player NSObject NSCoding private var playerName String private var playerScore Int pri
  • 是否可以从插件扩展 Wordpress XMLRPC 接口?

    是否可以创建一个插件 在激活时向 XMLRPC 接口添加新的 功能 并处理其调用 简而言之 是的 您可以将函数添加为插件或添加到主题的functions php 文件中来处理XMLRPC 调用 您将需要以下部分 function xml a
  • 没有配置身份验证处理程序来处理该方案

    这是一个非常烦人的问题 我在我的 asp net core 项目上设置 cookie 身份验证 有时会出现此错误 有时不会 没有图案 它只是开始抛出错误 然后突然停止 然后再次开始 例外情况是 InvalidOperationExcepti
  • 杂乱的扭曲连接在不干净的时尚中消失了。没有代理。已经尝试过标题

    我正在尝试抓取这个网站 https www5 apply2jobs com jupitermed ProfExt index cfm fuseaction mExternal searchJobs https www5 apply2jobs
  • 为类型列表创建别名并将其作为模板参数传递

    我正在使用可变参数模板来实现访问者模式 template
  • Rails 中过滤长日志参数

    我允许用户在我的网站上上传文件 其中一些文件可能非常大 并且占用了我的日志文件的很大一部分 所以我不想让它出现 我知道 config filter parameters password 过滤某些参数 但问题是参数位于这样的哈希中 pers
  • UnsafeMutablePointer 到具体对象类型

    我怎样才能从UnsafeMutablePointer
  • 在 R 中使用 nls 重新创建研究

    我正在学习如何在 R 中使用 nls 函数 但遇到了一些问题 我现在只是试图重新创建研究论文中发现的曲线 该模型拟合了 1987 年崩盘前股市走势的曲线 我定义了一个函数func 如下 func lt function a b tc t a
  • 启动时运行“浏览器外”Web 应用程序?

    我已经熟悉了 浏览器外 Web 应用程序的新概念 最近的 Silverlight JavaFX Adobe AIR 等都支持该应用程序 最近在听一个podcast http www hanselman com blog Hanselminu
  • 如何对这个 Flask 应用程序进行单元测试?

    我有一个 Flask 应用程序 它使用 Flask Restless 来提供 API 我刚刚写了一些身份验证来检查 如果消费者主机被识别 该请求包含一个哈希值 通过加密 POST 的请求内容和 GET 的 URL 以及秘密 API 密钥来计
  • 如何在Linux中自动启动需要X的应用程序

    我试图在系统进入运行级别 5 时自动启动 X 应用程序 这样做的正确方法是什么 我写了一个脚本并将其放在 etc init d 中 我已运行适当的 chkconfig 命令来设置 etc rcX d 目录中的符号链接 一切工作正常 除了当我
  • OnClick 触发另一个按钮单击事件

    由于某种原因 在我的代码中onClick活动为disableAccount每当我单击取消按钮时 按钮就会被激活 所以取消设置isEditMode为假但是disableAccount将其设置回 true 从而防止我在 UI 中看到任何明显的变