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.
segunda-feira, 31 de agosto de 2009
Assinar:
Postar comentários (Atom)
var inputs = document.getElementById(chkPassenger.ClientID)
ResponderExcluirAssim você pega o Id do componente .NET rodando em client.