segunda-feira, 31 de agosto de 2009

Usando javascript para percorrer Repeater

Hoje entrei em uma situação na qual nunca tinha passado, me pediram para fazer uma função em javascript para percorrer os checkbox de um repeater e analisar se pelo menos um estava checado.
O único problema é que o Visual Studio gera código pra você sobrescrevendo o nome e o id que você deu quando se usa usercontrol, assim um name="chkPassenger" se tranformou em: mUsrMain_UsrWebCheckInPassengersByFlight1_rptPNRSegments_ctl00_rptPassengers_ctl02_chkPassenger,
tudo bem ele gerou um span com o name correto, mas eu queria encontrar diretamente o checkbox.
A solução foi escrever este código:

function GetAllCheckBox()
{
var count = 0;
var inputs = document.getElementsByTagName('input');
for(var i = 0; i < inputs.length; i++)
{
      if(inputs[i].type == 'checkbox' && inputs[i].name.indexOf('chkPassenger') != -1)
     {
            if(inputs[i].checked == true)
            {
                   count++;
                   break;
            }
     }
}

if(count == 0)
      return false;
return true;
}

O porque do return? Bem como este evento estava sendo gerado por um itemcommand ele estava dando postback e claro, se eu precisava fazer em javascript era justamente para evitar ele. Para cancelar um postback, adicione a seguinte propriedade no controle que gerará ele:

OnClienteClick="return GetAllCheckBox();"

Assim se retornar false ele cancelará o postback, caso contrário o postback ocorrerá normalmente.

Um comentário:

  1. var inputs = document.getElementById(chkPassenger.ClientID)

    Assim você pega o Id do componente .NET rodando em client.

    ResponderExcluir