protected void CheckBoxColumn_PreRender(object sender, EventArgs e)
{
CheckBox checkBox = (CheckBox)sender;
ClientScript.RegisterArrayDeclaration("CheckBoxIDs", String.Format("'{0}'", checkBox.ClientID));
}
использование javascript
Для GridView видел такой код:
Код:
CheckBoxColumn_PreRender() была повешана на событие PreRender элемента CheckBox который находился в ItemTemplate GridView.
При попытке повесить обработчик на PreRender контрола CheckBoxList
и загнать все клиентские ид чекбоксов в массив ничего не получается, поскольку в аспнет всё делается через жопу, а конкретно в данном случае: на событиях PreRender и DataBound контрол CheckBoxList почемуто содержит только один чекбокс с пустым текстом. Хотя, согласно документации, он уже должен быть заполнен.
Подскажите, как мне обойтись чистым жабаскриптом? Допустим, я создам обработчик для кнопки, который будет перебирать все дочернии контролы клиентского CheckBoxList (он рендерится как таблица), и присваивать найденным чекбоксам checked=true?
Код:
function checkAllNodes(check)
{
var tbl = document.getElementById('<%=NodesCheckBoxList.ClientID%>');
var inputs = tbl.getElementsByTagName("input");
for (var i = 0; i < inputs.length; ++i)
{
if (inputs.type = "checkbox")
{
inputs.checked = check;
}
}
}
{
var tbl = document.getElementById('<%=NodesCheckBoxList.ClientID%>');
var inputs = tbl.getElementsByTagName("input");
for (var i = 0; i < inputs.length; ++i)
{
if (inputs.type = "checkbox")
{
inputs.checked = check;
}
}
}
Цитата: ArtemS2006
вот такую функцию написал всё работает
У меня другая, где list_id - клиентский идентификатор чекбокс листа:
Код:
function InvertSelection(list_id) {
var i = 0;
while(true) {
var item_id = list_id + '_' + i++;
var item = document.getElementById(item_id);
if(item == null)
break;
item.checked = !item.checked;
}
}
var i = 0;
while(true) {
var item_id = list_id + '_' + i++;
var item = document.getElementById(item_id);
if(item == null)
break;
item.checked = !item.checked;
}
}