簡體   English   中英

ASP.NET TreeView 復選框表現為單選按鈕

[英]ASP.NET TreeView checkboxes behave as Radio Buttons

我在 ASP.NET 和 C# 上使用 TreeView 控件,並且需要使用復選框制作所有節點(根和葉)。 然后,我需要將這些復選框用作單選按鈕,因此當單擊一個復選框時,以前選中的復選框現在未選中,新的復選框正在選中。

我在這個問題上的工作是首先將showCheckBoxes="All"屬性添加到 asp:TreeView,然后使用 TreeView1_TreeNodeCheckChanged 事件。 但是,此事件不會自動觸發,需要發才能啟動頁面! 因此,我使用javascript function 使其按照 stackoverflow.com 中類似帖子的建議啟動,但針對的是不同的問題。

<script type="text/javascript">
    function postBackByObject() {
        var o = window.event.srcElement;
        if (o.tagName == "INPUT" && o.type == "checkbox") {
            __doPostBack("", "");
        }
    }
</script>


protected void Page_Load(object sender, EventArgs e)
        {
          TreeView1.Attributes.Add("onclick", "postBackByObject()");    
        }

但是,我仍然無法弄清楚如何編寫TreeNodeCheckChanged function 來取消選中先前選中的復選框,並選中新的復選框。 由於回發操作讓我感到困惑。

提前致謝

嗯,你可以做這個 100% 的客戶端。

我們將在頁面加載時:

Select treeview。

然后 select 顯示任何復選框並添加點擊事件。

在那個點擊事件中?

獲取我們點擊的復選框 - 保存設置。

取消選中所有復選框。

選中/取消選中我們單擊的那一個返回到它的 state。

這似乎有效:

    <script>
        // select all check boxes - add event to that check box
        // on page load

        $(window).on('load', function () {
            tv = $('#TreeView1')
            nodes = tv.find('input[type=checkbox]')
            nodes.each(function () {
                $(this).change(function () { mycheck(this) } )
            })
        })

        function mycheck(e) {
            mychecked = e.checked    // save current check box
            myParent = $(e).closest('[id$=Nodes]')     // get current node
            clist = myParent.find('input[type=checkbox]')  // get all checkc box in node
            clist.each(function () {
                this.checked = false     // uncheck them all
            })
            e.checked = mychecked        // set state of the box we checked or un-checked.
        }
    </script>

所以,我得到/看到這個:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM