在render()
功能我有以下的代碼來生成複選框爲什麼複選框給出狀態問題?
var cbCollection = this.state.cbData.map(function(elem, index) {
var x=<span><label><input type = "checkbox" name = "cbCodes" id = "cb-{index}" value={elem.Id} checked={true} disabled={false} />{elem.DiagCodes}</label><br /></span>
return x;
})
它產生的checkboxes
,但我無法從他們被凍結的UI uncheck
他們,我該如何解決這一問題?
注意:目前我已經硬編碼檢查狀態假設檢查狀態也來自數據庫。在這種情況下如何使複選框可檢查和不可檢查?
UPDATE:
我已經修改了代碼:
//
getInitialState:function(){
return{
data1:[],
data2:[],
cbData:[],
cbCheckState:false
}
},
UpdateCheckbox:function(elem){
alert(elem.IsSelected);
this.setState({cbCheckState:elem.IsSelected});
},
render:function(){
var cbCollection = this.state.cbData.map(function(elem, index) {
//this.setCheckboxValue(elem.IsSelected);
var x=<span><label><input type = "checkbox" name = "cbCodes" id = {'cb-'+index} value={elem.Id} checked={this.state.cbCheckState} disabled={false} onChange={this.UpdateCheckbox(elem.IsSelected).bind(this)}/>{elem.DiagCodes}</label><br /></span>
return x;
})
return({cbCollection})
}
,現在它不顯示的複選框,IE引發錯誤
SCRIPT5007:無法獲取屬性「狀態」未定義或爲空 參考
內部代碼執行一些AJAX調用以從DB獲取數據並且DB將數據返回到dbData
數組。
更新:2 這裏是函數updateCheckbox()
UpdateCheckbox:function(elem){
alert(elem.IsSelected);
this.setState({cbCheckState:elem.IsSelected});
},
警報打印未定義當我手動點擊複選框
更新3:更新UpdateCheckbox()直到點擊時顯示未定義
UpdateCheckbox:function(elem){
elem.IsSelected = ! elem.IsSelected
alert(elem.IsSelected);
// this.setState({cbCheckState:elem.IsSelected});
},
渲染():
var cbCollection = this.state.cbData.map(function(elem, index) {
//this.setCheckboxValue(elem.IsSelected);
var x=<span><label><input type = "checkbox" name = "cbCodes" id = {'cb-'+index} value={elem.Id} checked={this.state.cbCheckState} disabled={false} onChange={this.UpdateCheckbox.bind(this,elem.IsSelected).bind(this)}/>{elem.DiagCodes}</label><br /></span>
return x;
}.bind(this))
更新:4 更新渲染():
var cbCollection = this.state.cbData.map(function(elem, index) {
//this.setCheckboxValue(elem.IsSelected);
var x=<span><label><input type = "checkbox" name = "cbCodes" id = {'cb-'+index} value={elem.Id} checked={this.state.cbCheckState} disabled={false} onChange={this.UpdateCheckbox.bind(this,elem)}/>{elem.DiagCodes}</label><br /></span>
return x;
}.bind(this));
它仍然不檢查複選框DB檢查值,但當我手動檢查alert()顯示true但另一個奇怪的事情我當我打沒關係警報()的選中的複選框變爲選中
更新5:現在的DB檢查得到遏制,但仍當我點擊確定警報的手動選中的複選框得到選中
var cbCollection = this.state.cbData.map(function(elem, index) {
//this.setCheckboxValue(elem.IsSelected);
var x=<span><label><input type = "checkbox" name = "cbCodes" id = {'cb-'+index} value={elem.Id} checked={elem.IsSelected} disabled={false} onChange={this.UpdateCheckbox.bind(this,elem)}/>{elem.DiagCodes}</label><br /></span>
return x;
}.bind(this));
如果它們的檢查狀態來自DB,那麼該怎麼辦?在這種情況下最適合的事件處理程序是什麼? –
我已經更新了我原來的文章 –
我不明白你......它與你需要綁定相同的那個字段檢查一些變量並不重要,如果它來自數據庫或某些地方......就像你寫的是真的檢查該複選框總是會被檢查。 – FreakProgrammer