2013-12-14 2 views
0

У меня есть функция JS для переключения состояния проверки для всех флажков в gridview. Теперь есть два похожих gridviews и так, хотелось бы использовать ту же функцию.Использовать одну функцию Javascript для нескольких GridViews

Это структура Страница:

RadioButton RB1, RB2 RadioButton

Gridview GV1, GridView GV2.

rb1 selected, показывает только gv1 и скрывает gv2 и наоборот.

При загрузке страницы проверяется только rb1 и отображается gv1.

Функция JS работает нормально, если используется только для одного вида сетки. Я изменил его на это, и он не работает. Где я иду не так.

JS:

<script type="text/javascript"> 

function SelectAll(chkBox) 
{ 
    var chkAll = document.getElementById(chkBox); 
    var elements; 
    var g1 = document.getElementById('<%=gv1.ClientID%>'); 
    var g2 = document.getElementById('<%=gv2.ClientID%>'); 
    if(g1.style.visibility=='visible') 
    { 
    elements = document.getElementById('<%=gv1.ClientID%>') 
      .getElementsByTagName("INPUT"); 
    } 
    else if(g2.style.visibility=='visible') 
    { 
    elements = document.getElementById('<%=gv2.ClientID%>') 
      .getElementsByTageName("INPUT"); 
    } 
for(var i=0;i<elements.length;i++) 
    {  
    var chk; 
    if(elements[i]!=null) 
    { 
     if(elements[i].id.indexof('chkLeaveType')>0) 
      { 
       chk=elements[i]; 
       chk.checked = chkAll.checked;  
      }    
    } 
    } 
} 
</script> 

ASPX:
OnClick = "SelectAll (this.id)" /> Оставить Тип

<asp:gridview id="gv2" runat="server"> 
<columns> 
    <asp:templatefield> 
    <headertemplate> 
    <asp:checkbox id="chkheader" runat="server" checked="true" 
    onclick="SelectAll(this.id)"/>Leave Type 
    </headertemplate> 
    <itemtemplate> 
     <asp:checkbox id="chkLeaveType" runat="server" checked="true"/> 
    </itemtemplate> 
    </asp:templatefield> 
</columns> 
</asp:gridview> 

ответ

1

Несколько проблем, которые я вижу:

  1. Вы пытаетесь (я верю), чтобы получить все дочерние флажки с этим битом коды :

    elements = document.getElementById('the grid id') 
        .document.getElementById("INPUT"); 
    

    Но, если я не ошибаюсь, getElementById делает то, что он говорит: получает элемент BY ID, а не по названию тега. Вам понадобится getElementsByTagName, чтобы получить элементы по их тегам.

  2. Кроме того, с помощью этого кода (не компилируется черточки добавил для акцента)

    document.getElementById('the grid id').document.getElementById("INPUT") 
        --------        -------- 
    

    ... вы прыгают обратно в верхней части DOM, тем document, и будет вытягивать детей из весь документ, а не только нужную вам сетку. Вы можете попробовать что-то вроде этого, оставляя прыжок обратно в document узел:

    document.getElementById('the grid id').getElementsByTagName('INPUT'); 
    
  3. Наконец, вы можете захотеть взглянуть на jquery (только предложение), как это делает делать такого рода вещи гораздо более простой.

+0

Извините. Это был Типо с моего конца. Это было фактически ... getElementByTagName ("INPUT"); Не могли бы вы предложить вам процедуру. Что еще мне нужно сделать, чтобы он работал. – Ruby

+0

Я думаю, что вам также не хватает окончательного '}'. Граф смотрит на меня. –

+0

Если это не помогает, я бы проверял, что 'g1.style.visibility == 'visible'' действительно истинно, когда отображается сетка 1, используя инструменты отладки вашего браузера. –

Смежные вопросы