Javascript 反应JS";onChange";功能在iPad上不起作用
我在输入上有一个Javascript 反应JS";onChange";功能在iPad上不起作用,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我在输入上有一个onChange-事件,用于侦听目标的时间。值大于0时,使类能够显示一个按钮 不过,这在台式机上有效,在iPad Safari上不起作用——我不确定为什么 注意:我使用的是样式化组件,PDInput被声明为输入 const PDInput = styled.input` background: #fff; border: none; border-bottom: 1px solid #f2f2f5; padding: 8px 0; padd
onChange
-事件,用于侦听目标的时间。值
大于0时,使类能够显示一个按钮
不过,这在台式机上有效,在iPad Safari上不起作用——我不确定为什么
注意:我使用的是样式化组件,PDInput
被声明为输入
const PDInput = styled.input`
background: #fff;
border: none;
border-bottom: 1px solid #f2f2f5;
padding: 8px 0;
padding-left: ${props => props.amount ? "15px" : "0"};
font-size: 16px;
color: #0c2074;
width: 100%;
margin-bottom: 24px;
&::placeholder {
color: #0c2074;
opacity: 0.5;
}
`
const updateRef = e => {
if(e.target.value > 0) {
setRef(true);
} else {
setRef(false);
}
}
<PDInput type="text" placeholder="E.G Rent" onChange={(e) => updateRef(e)} />
constpdinput=styled.input`
背景:#fff;
边界:无;
边框底部:1px实心#f2f5;
填充:8px0;
左侧填充:${props=>props.amount?“15px”:“0”};
字体大小:16px;
颜色:#0c2074;
宽度:100%;
边缘底部:24px;
&::占位符{
颜色:#0c2074;
不透明度:0.5;
}
`
const updateRef=e=>{
如果(例如,目标值>0){
setRef(真);
}否则{
setRef(假);
}
}
updateRef(e)}/>
这是一个解决方案-问题是e.target.value在技术上不是>0。它返回false。您想检查e.target.value!=''
代码:
const updateRef = e => {
if(e.target.value > 0 || e.target.value !== '') {
setRef(true);
} else {
setRef(false);
}
}
你能解释一下“非功能性”的具体含义吗?您是否能够从
updateRef
函数中登录?还是连电话都没有?在没有状态更新的情况下,您的条件是否按预期通过/失败?在我侦听e.target.value时,状态得到正确更新。当setRef设置为真时,屏幕上会显示一个按钮。这在桌面上可以正常工作,但在iPad safari上不能。在桌面上一切正常。你应该用safari日志调试iPad。日志可能更有用。按照此链接进行调试。是否可以显示PDInput的源代码?使用普通输入进行尝试,看看是否有效。也许这与样式化的组件有关。不像可能的那样干燥。尝试setRef(e.target.value>0 | | e.target.value!='')
。但是0
和'
都是假值,因此可以使用布尔强制进一步简化为setRef(!!e.target.value)
。@DrewReese-DRY?我会选择上面的解决方案,因为它比你建议的更容易阅读。@goto1我不得不同意Drew的观点,当我阅读if(booleanStatement){set(true)}else{set(false)}
时,我在想为什么会有这些额外的错误?只需执行设置(布尔语句)
。不确定我们是否应该从自称goto的人那里得到编码可读性的建议(只是开玩笑的Tom)。@HRM然后我会创建一个额外的变量,即const isValidRef=(…);setRef(isValidRef)
而不是使用setRef(!!e.target.value)
-不是每个人都会立即知道的内容代码>在这里运行。那么为什么它在桌面上运行呢?台式机和ipad在行为上有什么不同?