我试图建立一个适当的反应输入复选框,选择所有组件。想法是有一个组件<InputCheckboxAll>
,<InputCheckbox>
并且我可以检查<InputCheckboxAll>
,所有组件也都<InputCheckbox>
将被选中。
我有两个问题。
<InputCheckboxAll>
选中,则无法取消选择任何一个<InputCheckbox>
。<InputCheckbox>
选中,<InputCheckboxAll>
则应进行检查。这是例子。
var InputCheckboxAll = React.createClass({
handleChange: function (event) {
this.props.handleChange(event)
},
render: function () {
return (
<input
type='checkbox'
{...this.props}
onChange={this.handleChange} />
)
}
})
var InputCheckbox = React.createClass({
getInitialState: function () {
return {
checked: this.props.checked
}
},
render: function () {
var checkedValue = this.props.allChecked ? true : this.state.checked
return (
<input
checked={checkedValue}
type='checkbox'
{...this.props}/>
)
}
})
var Test = React.createClass({
getInitialState: function () { return {allChecked: false}; },
handleChange: function (event) {
var $elm = $(event.target)
var checked = $elm.prop('checked')
this.setState({
allChecked: checked
})
},
render: function () {
return (
<div>
Select All: <InputCheckboxAll handleChange={this.handleChange}/><br/>
<InputCheckbox allChecked={this.state.allChecked}/><br/>
<InputCheckbox allChecked={this.state.allChecked}/><br/>
<InputCheckbox allChecked={this.state.allChecked}/><br/>
</div>
)
}
})
React.render(<Test/>, document.body)
我认为可能会对您的实现进行一些修改,以便以更具 React风格的 形式获得所需的结果。
首先要取消的是InputCheckboxAll
复选框类和该类的allChecked
prop
InputCheckbox
。复选框是一个相对愚蠢的元素,它不应该了解诸如之类的概念Everything is selected
。
取而代之的是,应将复选框实现为简单 选中 或未 选中的项目 。
var InputCheckbox = React.createClass({
getDefaultProps: function () {
return {
checked: false
}
},
render: function () {
return (
<input
checked={this.props.checked}
type='checkbox'
{...this.props}/>
)
}
})
您应从主应用程序管理应用程序的状态(如“ 所有选定项”之类的 概念),使较低级别的元素保持无状态。主应用程序的状态可以简单地表示每个复选框的 选中
状态:
getInitialState: function () {
return {
// 3 checkboxes, all initialized as unchecked
checked: [false, false, false]
};
},
现在,您可以重新创建渲染功能以绘制3个复选框,以及您选择的所有复选框。每个数组都<InputCheckbox>
可以绑定到自己的数据this.state.checked
。当<Inputcheckbox>
更改时,我们将索引绑定到更改处理程序,因此我们知道要修改哪个数组元素。
render: function () {
// Recalculate if everything is checked each render, instead of storing it
var isAllChecked = this.state.checked.filter(function(c) {
return c;
}).length === this.state.checked.length;
return (
<div>
Select All: <InputCheckbox
onChange={this.selectAll}
checked={isAllChecked}/><br/>
<InputCheckbox
checked={this.state.checked[0]}
onChange={this.handleChange.bind(this, 0)}/><br/>
<InputCheckbox
checked={this.state.checked[1]}
onChange={this.handleChange.bind(this, 1)}/><br/>
<InputCheckbox
checked={this.state.checked[2]}
onChange={this.handleChange.bind(this, 2)}/><br/>
</div>
)
}
您不需要存储与 All Selected 相关的任何状态。相反,最好在每个渲染期间重新计算是否选择了所有内容。Select All
选中此复选框后,我们只需将的每个元素设置this.state.checked
为true。
这还具有以下优点:当您手动选择所有复选框时,全选复选框将自行检查。
这是一个示例实现:https :
//jsfiddle.net/rsupvxry/
我想有一个依赖的数字输入。 此数字输入依赖于一个选择框,该选择框通过选择每个选项为输入创建一个特定的数字范围。 例如: 如果我们选择option2,数字输入将是min=20和max=50!如果我们选择option3,数字输入将是min=10和max=30!怎样才能创造出这样一个特征呢? 以下是我尝试过的:
问题内容: 我正在尝试选中一个复选框的所有复选框。但是该怎么做呢? 这是我的HTML: 我创建了一个额外的复选框以选择并取消选择所有复选框。 JS: 我也尝试过,但是没有一个对我有用:( 问题答案: 您错过了容器的div 和和。 是正确的变体。 https://jsfiddle.net/0vb4gapj/1/
问题内容: 我需要有关jQuery选择器的帮助。假设我有一个标记,如下所示: 除了用户单击时,如何获取所有复选框? 问题答案: 一个更完整的示例适用于您的情况: 当被点击复选框,该复选框的状态进行检查,并在当前形式的所有复选框被设置为相同的状态。 请注意,您无需从选择中排除该复选框,因为该复选框的状态将与其他所有复选框相同。如果出于某些原因确实需要排除,则可以使用以下方法:
我创建了一个windows窗体(到目前为止)只包含复选框。构造函数接受一个参数:。对于这个数组中的每个字符串,我都会创建一个复选框。 例如: null 那么,当另一个复选框调用uncheck时,是否有一种方法可以告诉我的复选框不要运行? 下面是我的代码(它都是手工编写的,所以没有使用visual studio设计器):
问题内容: 所以我有这些复选框: 等等。它们大约有6个,并且都是手工编码的(即未从数据库中获取),因此它们可能会保持一段时间不变。 我的问题是如何将它们全部放入数组中(使用javascript),以便在使用Jquery 进行AJAX 请求时可以使用它们。 有什么想法吗? 编辑:我只希望将选中的复选框添加到数组 问题答案: 格式化: 希望它会起作用。
问题内容: 所以我有这些复选框: 等等。它们大约有6个,并且是手工编码的(即,不是从数据库中获取的),因此它们可能会保持一段时间不变。 我的问题是如何将它们全部放入一个数组中(使用javascript),以便在使用Jquery 进行AJAX 请求时可以使用它们。 有什么想法吗? 编辑:我只希望将所选的复选框添加到数组 问题答案: 格式化: 希望它将成功。