【发布时间】:2017-01-06 13:00:49
【问题描述】:
我正在尝试使用另一个输入字段的onChange 函数更改复选框的值。
我有这样的事情:
class price extends React.Component {
constructor(props) {
super(props);
this.state = {
minValue: 0,
maxValue: 20000,
step: 1000,
firstValue: null,
secondValue: null,
chcboxValue: false
};
this.handleChange = this.handleChange.bind(this);
}
componentWillMount() {
this.setState({firstValue: this.state.minValue, secondValue: this.state.maxValue});
}
handleChange(name, event) {
let value = event.target.value;
// We set the state value depending on input that is clicked
if(name === "second") {
if(parseInt(this.state.firstValue) < parseInt(value)) {
this.setState({secondValue:value});
}
} else {
// The first value can't be greater than the second value
if(parseInt(value) < parseInt(this.state.secondValue)) {
this.setState({firstValue: value});
}
}
// We set the checkbox value
if(parseInt(this.state.firstValue) != parseInt(this.state.minValue) || parseInt(this.state.secondValue) != parseInt(this.state.maxValue)) {
this.setState({chcboxValue: true});
} else {
this.setState({chcboxValue: false});
}
}
render() {
const language = this.props.language;
return (
<div>
<div className="priceTitle">{language.price}</div>
<InputRange language={language}
firstValue={parseInt(this.state.firstValue)}
secondValue={parseInt(this.state.secondValue)}
minValue={parseInt(this.state.minValue)}
maxValue={parseInt(this.state.maxValue)}
step={parseInt(this.state.step)}
handleChange={this.handleChange}
chcboxValue={this.state.chcboxValue}/>
</div>
);
}
}
我的InputRange 组件是这样的:
const inputRange = ({language, firstValue, secondValue, minValue, maxValue, step, handleChange, chcboxValue}) => {
return (
<div>
<div className="rangeValues">Range : {firstValue} - {secondValue}</div>
<section className="range-slider">
<input type="checkbox" checked={chcboxValue} />
<input type="range" value={firstValue} min={minValue} max={maxValue} step={step} onChange={handleChange.bind(this, "first")} />
<input type="range" value={secondValue} min={minValue} max={maxValue} step={step} onChange={handleChange.bind(this, "second")} />
<div className="minValue">{minValue}</div>
<div className="maxValue">{maxValue}</div>
</section>
</div>
);
};
初始加载时的复选框值设置为 false。当用户更改价格范围滑块的值时,我希望复选框值更改为 true。
当用户将价格范围滑块的值更改为其初始值(最小值和最大值)时,我希望复选框值再次更改为 false。
在我的示例中不起作用。
有什么想法吗?
【问题讨论】:
-
你确定它是 OR 吗? (||) 你说
When user changes the values of the price range slider to their initial values (min and max values) -
如果其中一个值不等于最小值和最大值,则表示用户更改了价格滑块,对吧?
-
如果 ONE 不相等(假设您更改了 A 而不是 BA == 初始值|| B == 初始值将评估为 TRUE,而不是更改 A 或 B 将导致相同的结果,并且仅更改两者都会返回 TRUE,因此正如您正确地说,如果其中一个不是初始的,您不希望它返回 TRUE,因此它是一个 AND 运算符)。此外我不知道您的代码中是否还有更多错误,但是更改 ||对于 && 是一个好的开始。 :)
-
如果其中一个不是最初的,我想返回 true。如果最小值 == 0 和最大值 == 20000,如果 A 由 0 变为 1000 且 B 相同,则为 20000;然后我想将复选框更改为 true。
标签: javascript reactjs checkbox