首页 新闻 搜索 专区 学院

TreeView checkbox 只读

0
悬赏园豆:5 [已解决问题] 解决于 2012-06-19 14:02

 

如上图所示,在ASP.NET Web 中,TreeView加载节点,设置选中项为只读,不可操作(亦可理解为不可被取消)。

问题:
在JS中已设置checkbox只读,点击checkbox时已无效。但是点击checkbox后面的文字时,checkbox仍然可以被取消选中。

kumat的主页 kumat | 初学一级 | 园豆:37
提问于:2012-06-19 08:48
< >
分享
最佳答案
1

checkbox的html是<input type="checkbox" id="xx"><label>内容</label>这才是一个完整的checkebox把后面的label也禁用掉应该可以了

收获园豆:4
MingHao_Hu | 初学一级 |园豆:8 | 2012-06-19 09:14

我查看源代码每段如下

<td style="white-space:nowrap;">
<input type="checkbox" name="ctl00_ContentPlaceHolder1_treeMenun46CheckBox" id="ctl00_ContentPlaceHolder1_treeMenun46CheckBox" /><span class="ctl00_ContentPlaceHolder1_treeMenu_0" id="ctl00_ContentPlaceHolder1_treeMenut46">按航线查询</span>
</td>

JS设置代码

        //禁用与角色绑定的菜单权限
        function DisabledTreeNodes() {
            $("#divTreeMenu").find(":checkbox").each(function() {
                if ($(this).attr("title") != "") {
                    $(this).attr("disabled", true);
                    $(this).attr("checked", true);
                }
                else {
                    $(this).attr("disabled", false);
//                    $(this).attr("checked", false);
                }
            });
        }
kumat | 园豆:37 (初学一级) | 2012-06-19 09:18

@唐小熊: function DisabledTreeNodes() {
            $(
"#divTreeMenu").find(":checkbox").each(function() {
               
if ($(this).attr("title") != "") {
                    $(
this).attr("disabled", true);
                    $(
this).attr("checked", true);
                }
               
else {
                      $(
this).attr("disabled", false);

          $(this).subling('span').attr("disabled", false);//禁用掉checkbox的兄弟span标签看可以吗

}
            });
        }

MingHao_Hu | 园豆:8 (初学一级) | 2012-06-19 09:23

@MingHao_Hu: 

错误: 对象不支持此属性或方法

kumat | 园豆:37 (初学一级) | 2012-06-19 09:25

@唐小熊: 不好意思写错了siblings() 这个不过要引入jquery相应的js文件啊

MingHao_Hu | 园豆:8 (初学一级) | 2012-06-19 09:28

@MingHao_Hu::-) 没事,现在不报错了 但是点击文字部分还是可以操作checkbox = = 也不晓得怎么回事  

kumat | 园豆:37 (初学一级) | 2012-06-19 09:35
<table cellpadding="0" cellspacing="0" style="border-width:0;">
        <tr>
            <td><a id="ctl00_ContentPlaceHolder1_treeMenun54" href="javascript:TreeView_ToggleNode(ctl00_ContentPlaceHolder1_treeMenu_Data,54,ctl00_ContentPlaceHolder1_treeMenun54,' ',ctl00_ContentPlaceHolder1_treeMenun54Nodes)"><img src="/WebResource.axd?d=Ra1Nq2qXHrm6FvxUuxgzaC_PMT9TM3qORCnfTisbg24BZnwsi2lDUOXB9V46dp0KC-e2DY6GcHbEEZ8mN9Dn1kJGLY6MAXLwlCeeUpvQfNv8ErLK0&amp;t=634751731141718750" alt="折叠 灵活报表" style="border-width:0;" /></a></td><td style="white-space:nowrap;"><input type="checkbox" name="ctl00_ContentPlaceHolder1_treeMenun54CheckBox" id="ctl00_ContentPlaceHolder1_treeMenun54CheckBox" checked="checked" title="灵活报表530" /><span class="ctl00_ContentPlaceHolder1_treeMenu_0" title="灵活报表530" id="ctl00_ContentPlaceHolder1_treeMenut54">灵活报表</span></td>
        </tr>
    </table><div id="ctl00_ContentPlaceHolder1_treeMenun54Nodes" style="display:block;">
        <table cellpadding="0" cellspacing="0" style="border-width:0;">
            <tr>
                <td><div style="width:20px;height:1px"></div></td><td><img src="/WebResource.axd?d=cPINOqQ3LWtIigIHwjpe5eLDgqgOyYk-ASEF3WxCfOJuUuBpUyISuozB0ZkGpatEl1TQgLGwKKKkiJRhVWE_8SL1HMbisscJvUrwr_ZbzRkYxswy0&amp;t=634751731141718750" alt="" /></td><td style="white-space:nowrap;"><input type="checkbox" name="ctl00_ContentPlaceHolder1_treeMenun55CheckBox" id="ctl00_ContentPlaceHolder1_treeMenun55CheckBox" checked="checked" title="灵活报表530" /><span class="ctl00_ContentPlaceHolder1_treeMenu_0" title="灵活报表530" id="ctl00_ContentPlaceHolder1_treeMenut55">灵活报表</span></td>
            </tr>
        </table><table cellpadding="0" cellspacing="0" style="border-width:0;">
            <tr>
                <td><div style="width:20px;height:1px"></div></td><td><img src="/WebResource.axd?d=cPINOqQ3LWtIigIHwjpe5eLDgqgOyYk-ASEF3WxCfOJuUuBpUyISuozB0ZkGpatEl1TQgLGwKKKkiJRhVWE_8SL1HMbisscJvUrwr_ZbzRkYxswy0&amp;t=634751731141718750" alt="" /></td><td style="white-space:nowrap;"><input type="checkbox" name="ctl00_ContentPlaceHolder1_treeMenun56CheckBox" id="ctl00_ContentPlaceHolder1_treeMenun56CheckBox" checked="checked" title="灵活报表530" /><span class="ctl00_ContentPlaceHolder1_treeMenu_0" title="灵活报表530" id="ctl00_ContentPlaceHolder1_treeMenut56">Analyzer管理</span></td>
            </tr>
        </table><table cellpadding="0" cellspacing="0" style="border-width:0;">
            <tr>
                <td><div style="width:20px;height:1px"></div></td><td><img src="/WebResource.axd?d=cPINOqQ3LWtIigIHwjpe5eLDgqgOyYk-ASEF3WxCfOJuUuBpUyISuozB0ZkGpatEl1TQgLGwKKKkiJRhVWE_8SL1HMbisscJvUrwr_ZbzRkYxswy0&amp;t=634751731141718750" alt="" /></td><td style="white-space:nowrap;"><input type="checkbox" name="ctl00_ContentPlaceHolder1_treeMenun57CheckBox" id="ctl00_ContentPlaceHolder1_treeMenun57CheckBox" checked="checked" title="灵活报表530" /><span class="ctl00_ContentPlaceHolder1_treeMenu_0" title="灵活报表530" id="ctl00_ContentPlaceHolder1_treeMenut57">文件夹分配</span></td>
            </tr>
        </table>
    </div>

这是整个完整的报表节点

@MingHao_Hu: 

kumat | 园豆:37 (初学一级) | 2012-06-19 09:40

@唐小熊: 把生成的Html给我,我看下

MingHao_Hu | 园豆:8 (初学一级) | 2012-06-19 09:40

@MingHao_Hu: 你看看上面这个行么

kumat | 园豆:37 (初学一级) | 2012-06-19 09:42

@唐小熊:  $(function () {
        $('input:checkbox').attr('disabled', 'disabled');
    });这样去禁用我这里测的是可以禁用的

MingHao_Hu | 园豆:8 (初学一级) | 2012-06-19 09:57

@MingHao_Hu: 是TreeView的checkbox么,点击文字也被禁用了?

kumat | 园豆:37 (初学一级) | 2012-06-19 10:00

@唐小熊: 是的同时文字也禁用了

MingHao_Hu | 园豆:8 (初学一级) | 2012-06-19 10:03

@MingHao_Hu: 可我这边还是不行= =.......

kumat | 园豆:37 (初学一级) | 2012-06-19 10:05

@唐小熊: 你用什么浏览器Jquery 什么版本啊!我在IE上,jquery1.7的版本

 

MingHao_Hu | 园豆:8 (初学一级) | 2012-06-19 10:06

@MingHao_Hu: v1.4.2 IE8

kumat | 园豆:37 (初学一级) | 2012-06-19 10:11

@唐小熊: 调试下看this是什么东西,看他的一些属性值'disabled'的值是什么

MingHao_Hu | 园豆:8 (初学一级) | 2012-06-19 10:17

@MingHao_Hu: 

        function testClick(e)
        {
            if (window.event) e = window.event;
            var evt = e.srcElement ? e.srcElement : e.target;
            if (evt.previousSibling && evt.previousSibling.tagName == "INPUT" && evt.previousSibling.type == "checkbox") {
                if(!evt.previousSibling.disabled){
                evt.previousSibling.checked = evt.previousSibling.checked ? false : true;
                }

                var childrenDivID = evt.previousSibling.id.replace('CheckBox', 'Nodes');
                var div = document.getElementById(childrenDivID);
                if (div == null) return;
                var checkBoxs = div.getElementsByTagName('INPUT');
                for (var i = 0; i < checkBoxs.length; i++) {
                    if (checkBoxs[i].type == 'checkbox') {  
                        if(!evt.previousSibling.disabled){       
                           checkBoxs[i].checked = evt.previousSibling.checked;
                        }
                    }
                }
            }
        }    

谢谢你啊,真凶其实是它➹。判断只读是后加的。

kumat | 园豆:37 (初学一级) | 2012-06-19 14:01
其他回答(1)
1

点击文字应该会触发一个事件:selected(具体的不清楚,大致是这个吧),如果你的checkbox是绑定到这个item的selected状态的话。。。

你要知道,checkbox设置为readonly(好像是disabled)只是限制我们的UI输入,而不会限制我们在代码层次对这个进行改动。

你可以把checkbox的checked不要绑定到item的selected状态,而是绑定到另外的一个值。

收获园豆:1
无之无 | 园豆:5085 (大侠五级) | 2012-06-19 08:55

是Enable,checkbox本身找不到事件,TreeView的点击事件也指在点击checkbox时才触发。

把checkbox的checked不要绑定到item的selected状态,而是绑定到另外的一个值。是在哪设置呢?

支持(0) 反对(0) kumat | 园豆:37 (初学一级) | 2012-06-19 09:03

@唐小熊: 我几乎没用过这个,所以就没办法具体指出来了,设置方式应该在文档里有类似的说明,就象你设置绑定一样。

支持(0) 反对(0) 无之无 | 园豆:5085 (大侠五级) | 2012-06-19 09:07

@笨笨蜗牛: 谢谢啊,最终找出来是JS的问题。

支持(0) 反对(0) kumat | 园豆:37 (初学一级) | 2012-06-19 14:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册