[英]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.