我希望自动禁用我的文本字段,但当我单击‘编辑’按钮时,它会启用它们进行编辑,再次单击它会再次禁用它们,但会将编辑保存在文本字段中.

我try 在MUI中使用Textfield,然后用一个函数禁用它,并在按钮中调用它:

const User = () => {
     <TextField id="tf" size="small" className={classes.text} value="JohnDo3" variant="filled" disabled/>
     <Button id="button" onClick={edit()} variant="edit" className={classes.button}>Edit</Button>
}

function edit(){
     document.getElementById("tf").disabled=false;
}

但这给了我一个奇怪的错误,即我的值是空的,尽管它不是空的.我也try 了使用相同的 struct 的ReadOnly,但它是相同的错误.然后我try 了setDisable和setReadOnly:

const User = () => {
     <TextField id="tf" size="small" className={classes.text} value="JohnDo3" variant="filled" readOnly/>
     <Button id="button" onClick={edit()} variant="edit" className={classes.button}>Edit</Button>
}

function edit(){
     var tf = document.getElementById("tf");
     tf.setReadOnly(true);
}

然后,我try 使用常规标记,而不是使用不同类型的方法:

const User = () => {
     <input type="text" className={classes.text} name="username" id="tf" value="johndo3" disabled/>
     <input type="button" name="edit" id="button" className={classes.button} value="Edit" onclick="edit()"/>
}

function edit(){
        document.getElementById("tf").disabled = !document.getElementById("tf").disabled;
}

所有这些对我来说都不管用,所以希望有人能给我一些其他的try .任何帮助都将不胜感激!

推荐答案

在Reaction中直接与DOM交互是错误的方法.你错过了《react 》中的critical个概念...state.

使用状态值来确定元素是否被禁用.例如,如果声明如下所示的状态值:

const [isDisabled, setIsDisabled] = useState(true);

然后,您可以使用它来填充disabled属性:

<TextField id="tf" size="small" className={classes.text} value="JohnDo3" variant="filled" disabled={isDisabled}/>

然后,当您想要启用该字段时,只需更新状态:

onclick={() => setIsDisabled(false)}

Javascript相关问答推荐

除了在Angular 16中使用快照之外,什么是可行且更灵活的替代方案?

在HTML中使用脚本变量作为背景图像源

在具有焦点和上下文的d3多线图表中,如何将上下文的刷新限制在特定日期?

用相器进行向内碰撞检测

zoom svg以适应圆

警告!合同执行期间遇到错误[执行已恢复](Base Layer 2)

将自定义排序应用于角形数字数组

MathJax可以导入本地HTML文档使用的JS文件吗?

构造HTML表单以使用表单数据创建对象数组

无法检测卡片重叠状态的问题

如何从隐藏/显示中删除其中一个点击?

如何根据当前打开的BottomTab Screeb动态加载React组件?

如何解决useState错误—setSelect Image不是函数''

在open shadow—root中匹配时,使用jQuery删除一个封闭的div类

IF语句的计算结果与实际情况相反

当标题被点击时,如何使内容出现在另一个div上?

如果没有页面重新加载Angular ,innerHTML属性绑定不会更新

背景动画让网站摇摇欲坠

我为什么要使用回调而不是等待?

谷歌饼图3D切片