الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ال Treeview و ال Checkboxes

بدأه C++er في 26 أغسطس 2009 · 0 رد · 296 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1

واجهتنى مشكله من قبل و هى انى اريد تحديد كل الـ CheckBoxes الخاصه بمجموعه الفروع التى تندرج تحت فرع معين و لكن ليس بعد الـ Postback لذا كان لابد من البحث عن حل بالـ Javascript و حيث انه لم يوجد وقت حينها لكتابة الكود لذا فقمت بالبحث عنه و ها هو

داخل الـ Page_Load قم بإضافة هذا الكود

TreeView1.Attributes.Add("onclick","OnTreeClick(event)");

حيث ان TreeView1 هو اسم اداة الـ Treeview.

داخل الـ HTML الخاص بالصفحه قم بكتابة ذلك الكود

function OnTreeClick(evt)
   {
		var src = window.event != window.undefined ? window.event.srcElement : evt.target;
		var isChkBoxClick = (src.tagName.toLowerCase() == "input" && src.type == "checkbox");
		if(isChkBoxClick)
		{
			var parentTable = GetParentByTagName("table", src);
			var nxtSibling = parentTable.nextSibling;
			if(nxtSibling && nxtSibling.nodeType == 1)//check if nxt sibling is not null & is an element node
			{
				if(nxtSibling.tagName.toLowerCase() == "div") //if node has children
				{
					//check or uncheck children at all levels
					CheckUncheckChildren(parentTable.nextSibling, src.checked);
				}
			}
			//check or uncheck parents at all levels
			CheckUncheckParents(src, src.checked);
		}
   } 
   function CheckUncheckChildren(childContainer, check)
   {
	  var childChkBoxes = childContainer.getElementsByTagName("input");
	  var childChkBoxCount = childChkBoxes.length;
	  for(var i = 0; i<childChkBoxCount; i++)
	  {
		childChkBoxes.checked = check;
	  }
   }
   function CheckUncheckParents(srcChild, check)
   {
	   var parentDiv = GetParentByTagName("div", srcChild);
	   var parentNodeTable = parentDiv.previousSibling;

	   if(parentNodeTable)
		{
			var checkUncheckSwitch;

			if(check) //checkbox checked
			{
				var isAllSiblingsChecked = AreAllSiblingsChecked(srcChild);
				if(isAllSiblingsChecked)
					checkUncheckSwitch = true;
				else	
					return; //do not need to check parent if any(one or more) child not checked
			}
			else //checkbox unchecked
			{
				checkUncheckSwitch = false;
			}

			var inpElemsInParentTable = parentNodeTable.getElementsByTagName("input");
			if(inpElemsInParentTable.length > 0)
			{
				var parentNodeChkBox = inpElemsInParentTable[0]; 
				parentNodeChkBox.checked = checkUncheckSwitch; 
				//do the same recursively
				CheckUncheckParents(parentNodeChkBox, checkUncheckSwitch);
			}
		}
   }
   function AreAllSiblingsChecked(chkBox)
   {
	 var parentDiv = GetParentByTagName("div", chkBox);
	 var childCount = parentDiv.childNodes.length;
	 for(var i=0; i<childCount; i++)
	 {
		if(parentDiv.childNodes.nodeType == 1) //check if the child node is an element node
		{
			if(parentDiv.childNodes.tagName.toLowerCase() == "table")
			{
			   var prevChkBox = parentDiv.childNodes.getElementsByTagName("input")[0];
			  //if any of sibling nodes are not checked, return false
			  if(!prevChkBox.checked) 
			  {
				return false;
			  } 
			}
		}
	 }
	 return true;
   }
   //utility function to get the container of an element by tagname
   function GetParentByTagName(parentTagName, childElementObj)
   {
	  var parent = childElementObj.parentNode;
	  while(parent.tagName.toLowerCase() != parentTagName.toLowerCase())
	  {
		 parent = parent.parentNode;
	  }
	return parent;	
   }

و الله ولى التوفيق

مدونتي: C++ Tips and Tricks

مواضيع مشابهة