2009-10-28 2 views
0

Как получить идентификатор всех флажков, сгенерированных checkboxlist, с данными в качестве источника данных?Checkboxlist + получение идентификаторов всех флажков

Я думаю, что мне нужно использовать событие «OnDataBinding» в списке флажков, но я не вижу, как это мне поможет.

Я использую C#

Я не думаю, что получение идентификаторов всех флажков, генерируемых в списке флажков можно, так что я думаю, идя Moo инструменты путь является правильным, что нужно сделать.

Любые идеи?

Благодаря

ответ

1

В идеале вы хотели бы просто привязать обработчики событий кликов ко всем спискам флажков в событии domReady, и это создаст гораздо более простую функцию с MooTools. Тем не менее, вы можете сохранить свой код как есть, если хотите, и просто сделать ваши 2 функции немного проще.

function ToggleSelection(ctrl, sender) { 
    var checkboxes = $(ctrl).getElements('input[type=checkbox]'); 
    checkboxes.set('checked', sender.checked); 
} 

function ToggleSelectAll(ctrl, sender) { 
    var fAllChecked = ($(sender).getElements('input:checked').length == $(sender).getElements('input[type=checkbox]').length) 
    $(ctrl).set('checked', fAllChecked); 
} 

Вы можете сразу установить свойства всего массива ELements, вам не нужно их перебирать. Во второй функции я проверяю количество элементов, которые проверяются на общее количество флажков, и если они совпадают, это означает, что все они отмечены.

+0

Это определенно намного лучше. благодаря – iJK

0

Вы используете VB или C# .. пожалуйста, помечать соответственно

Вы можете иметь список или строку с именем strchklist

VB.NET

For Each li In CheckBoxList1.Items 
     If li.Selected Then 
      strchklist += li.Id 
     End If 
    Next 

C#

foreach (ListItem li in CheckBoxList1.Items){ 
     If li.Selected 
      strchklist += li.Id ;} 
+0

Извините, забыли пометить язык – iJK

+0

Это не сработает, потому что ListItem не имеет свойства «ID». Я также попробовал li.Attributes ["id"] и возвращает null. – iJK

0

<asp:ListItem> На самом деле сам контроль сам по себе не имеет идентификатора. Если вы хотите получить к нему доступ в клиентском скрипте, добавьте новый атрибут, который вы можете ссылаться. (да, во время OnDataBinding) Помните, что они не сохраняются в ViewState, однако!

Что именно вы пытаетесь достичь? Может помочь несколько уточнить.

+0

У меня есть флажок и отдельный флажок (Выбрать все). Поэтому, когда флажок с флажком select all проверен, мне нужно было проверить все флажки, сгенерированные в списке флажков, и наоборот. Поэтому, когда флажок, созданный в списке флажков, не проверен, мне нужно снять флажок «Выбрать все», если он установлен. Так что я думаю, что мне нужно знать флажки, сгенерированные checkboxlist, так что я могу добавить скрипт, чтобы проверить или снять флажок «Выбрать все» ... Надеюсь, что я буду чист. – iJK

+0

Ну, это отличное место для использования jQuery, тогда, если вы хотите сделать это на стороне клиента. Кроме того, я отправлю вам альтернативный ответ. – Bryan

0

Совершенно другой ответ ...

CheckBoxList немного нечетного уток ... в отличии от других элементов управления, это на самом деле не имеет логическое отображение к очевидному HTML конструкции. Он фактически отображает несколько флажков с идентификаторами производных. Эти идентификаторы, как представляется, генерируется CheckBoxList.ClientID + "_" + ItemIndex.

Вы можете проверить это, посмотрев на источник страницы. Внутренне, кажется, что идентификатор отдельного элемента checkbox является его индексом, а затем он отображается с помощью CheckBoxList как своего NamingContainer. Вы можете использовать Reflector, чтобы увидеть, как элемент управления CheckBoxList выводит результат.

Все еще хорошее место для jQuery. Просто проще теперь вы знаете идентификаторы.

+0

Да, использование JQuery сделает его очень легким. Тем не менее, я создаю веб-часть для решения CMS (kentico), которое поставляется с инструментами moo и конфликтует с JQuery. – iJK

+0

Hi Bryan, Я слышал, что вы сказали, и я не знаю, почему я не думал писать его в «инструментах moo». Я думаю, что это потому, что я помню, как это расстраивало попытку определить, почему jquery не работает. Итак, я получил его, но мне не нужно было знать все идентификаторы флажков, сгенерированных в списке флажков. – iJK

0

Я проснулся сегодня утром и мысли об этом (cblUSEquities список Флажок)

cblUSEquities.Attributes.Add("onclick", "javascript:alert('Clicked');"); 

Это добавляет предупреждение в таблицу, список флажок генерирует. Одно замечание: предупреждение появляется дважды. Если я нажму на текст флажка и один раз, если я нажму на этот флажок. Я думаю, что это решение будет работать для меня.

Кстати, я никогда не думал, что приведенный выше код будет работать ...

П.S Отвечая на мой собственный вопрос, потому что я хотел написать код, который я не могу сделать, используя поле комментариев.

В духе StackOverFlow я пришел к чему-то, что работает в моем сценарии, но описание вопроса отличается? Что я делаю? Измените вопрос и отметьте это как ответ?

0

Я смог сделать это с помощью mootools, и это код.

function ToggleSelection(ctrl, sender) 
{ 
    var cblCtrl = $(ctrl); 
    var Allcbs = cblCtrl.getElements('input'); 

    for(var i=0; i<Allcbs.length; i++) 
     Allcbs[i].checked = sender.checked; 
} 

function ToggleSelectAll(ctrl, sender) 
{ 
    var AllTrueCount = 0; 
    var cblCtrl = $(ctrl); 
    var Allcbs = sender.getElements('input'); 

    for(var i=0; i<Allcbs.length; i++) 
     if(Allcbs[i].checked) 
      AllTrueCount++; 

    if(AllTrueCount == Allcbs.length) 
     cblCtrl.checked = true; 
    else 
     cblCtrl.checked = false; 
} 

C# код, который вызывает JavaScript функции

//Binding event to the checkbox list 
cblUSEquities.Attributes.Add("onclick", string.Format("javascript:ToggleSelectAll('{0}', this);", chkAllUSEquities.ClientID)); 

//binding event to the select all checkbox 
chkAllUSEquities.Attributes.Add("onclick", string.Format("javascript:ToggleSelection('{0}', this);", cblUSEquities.ClientID)); 

Как оказалось, мне не нужно знать идентификаторы всех флажков, генерируемых в списке флажок. Я был в состоянии добавить OnClick JavaScript для этих флажков на этой линии

cblUSEquities.Attributes.Add("onclick", string.Format("javascript:ToggleSelectAll('{0}', this);", chkAllUSEquities.ClientID)); 

который добавит событие OnClick к столу, что список флажка генерирует.