dojo / cbtree取消选中所有复选框并选中所选复选框

时间:2015-03-26 16:49:48

标签: javascript checkbox dojo

我想在此实例中使复选框或多或少地像单选按钮一样工作。这就是我到目前为止所拥有的。我希望能够在treeCheckboxClicked()函数中执行此操作,以便只取消选中所有剩余的复选框,然后选中已选中的复选框。

buildTocTree: function (cp1) {
    var self = this;
            var toc = new TOC({
                checkboxes: false,
                enableDelete: true,
                deleteRecursive: true,
                showRoot: false,
                checkBoxes: false,
            }, self._viewId + '_tocTree');
    toc.on("checkBoxClick", dojo.hitch(this, "treeCheckboxClicked"));
},

treeCheckboxClicked: function (e) {  
            if (e.checked) {
                if (e.subLayers || e.name === 'GISLayer')
                    this.selectedLayerValue('');
                else if (e.layerInfos)
                    this.selectedLayerValue('');
                else
                    this.selectedLayerValue(e.name);

                if (this.selectedLayerValue() != '')
                    this._selectedGISSourceLayer = e;
                else
                    this._selectedGISSourceLayer = '';
            }
        }

2 个答案:

答案 0 :(得分:0)

如果不了解TOC小部件的内部细节,尤其是其DOM,则很难知道如何查询其模板中的所有复选框。假设您的treeCheckboxClicked已被调用,而e.target是复选框元素本身,则以下代码可让您接近所需的功能:

if (e.checked) {
    query('checkbox', self.domNode).forEach(function (checkbox) {
        checkbox.checked = checkbox != e.target;
    });

    //...
}

注意:这假设已加载了dojo / query模块。

答案 1 :(得分:0)

您使用的是agsjs.TOC吗?他们有一个处理程序包括为您执行此操作。在examplesat http://gmaps-utility-gis.googlecode.com/svn/tags/agsjs/latest/examples/toc.html中,他们使用按钮关闭和打开该功能,但您可以将其设置为默认值,并在树声明中包含以下代码段。 (用你的图层替换DynaLayer 1)

toc.on('toc-node-checked', function(evt){
	// when check on one layer, turn off everything else on the public safety service.
	if (evt.checked && evt.rootLayer && evt.serviceLayer && evt.rootLayer == dynaLayer1){
	evt.rootLayer.setVisibleLayers([evt.serviceLayer.id])
    }