Estou usando o jQuery para ocultar e mostrar elementos quando um grupo de botões de opção é alterado / clicado. Funciona bem em navegadores como o Firefox, mas no IE 6 e 7, a ação ocorre apenas quando o usuário clica em outro lugar da página.
Para elaborar, quando você carrega a página, tudo parece bem. No Firefox, se você clicar em um botão de opção, uma linha da tabela é ocultada e a outra é mostrada imediatamente. No entanto, no IE 6 e 7, você clica no botão de opção e nada acontecerá até clicar em algum lugar da página. Somente então o IE redesenha a página, ocultando e mostrando os elementos relevantes.
Aqui está o jQuery que estou usando:
$(document).ready(function () {
$(".hiddenOnLoad").hide();
$("#viewByOrg").change(function () {
$(".visibleOnLoad").show();
$(".hiddenOnLoad").hide();
});
$("#viewByProduct").change(function () {
$(".visibleOnLoad").hide();
$(".hiddenOnLoad").show();
});
});
Aqui está a parte do XHTML que ele afeta. A página inteira valida como XHTML 1.0 Strict.
<tr>
<td>View by:</td>
<td>
<p>
<input type="radio" name="viewBy" id="viewByOrg" value="organisation"
checked="checked" />Organisation</p>
<p>
<input type="radio" name="viewBy" id="viewByProduct" value="product" />Product</p>
</td>
</tr>
<tr class="visibleOnLoad">
<td>Organisation:</td>
<td>
<select name="organisation" id="organisation" multiple="multiple" size="10">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
</select>
</td>
</tr>
<tr class="hiddenOnLoad">
<td>Product:</td>
<td>
<select name="product" id="product" multiple="multiple" size="10">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
</select>
</td>
</tr>
Se alguém tiver alguma idéia de por que isso está acontecendo e como corrigi-lo, seria muito apreciado!
fonte
click
difere dechange
que seu manipulador de eventos também será chamado ao clicar na opção já selecionada, ao contrário dechange
não. Esta resposta tem um exemplo de como usar o jQuery.data
para comparar os valores antigos e novos.O problema de usar o
click
evento em vez dechange
é obter o evento se a mesma caixa de rádio estiver selecionada (ou seja, na verdade não mudou). Isso pode ser filtrado se você verificar se o novo valor é diferente do antigo. Acho isso um pouco chato.Se você usar o
change
evento, poderá perceber que ele reconhecerá a alteração depois que você clicar em qualquer outro elemento no IE. Se você ligarblur()
para oclick
evento, ochange
evento será acionado (apenas se as caixas de rádio realmente tiverem sido alteradas).Aqui está como eu estou fazendo isso:
Agora você pode usar o evento de alteração normalmente.
Editar: adicionada uma chamada para o focus () para evitar problemas de acessibilidade (consulte o comentário de Bobby abaixo).
fonte
Você já experimentou o evento onpropertychange do IE? Não sei se faz diferença, mas provavelmente vale a pena tentar. O IE não aciona o evento de alteração quando os valores são atualizados via código JS, mas talvez a alteração de propriedade funcione nessa instância.
fonte
Isso deve funcionar também:
Obrigado Pier. Isso foi muito útil.
fonte
click
porclick keyup keypress
para adicionar suporte ao teclado.No IE, você deve usar o evento click, em outros navegadores, na troca. Sua função pode se tornar
fonte
click
porclick keyup keypress
para adicionar suporte ao teclado.adicione este plugin
então
fonte
Eu tive o mesmo problema com o texto de entrada.
Eu mudei:
para
e tudo está funcionando bem para mim!
fonte
Esta é uma maneira simples de dizer ao IE para disparar o evento de alteração quando o elemento é clicado:
Você pode expandir isso para algo mais genérico para trabalhar com mais elementos de formulário:
fonte
Tenho certeza de que esse é um problema conhecido no IE. A adição de um manipulador para o
onclick
evento deve corrigir o problema:fonte
No IE, force o rádio e as caixas de seleção para acionar um evento de "alteração":
fonte
a partir do jquery 1.6 isso não é mais um problema .. não tenho certeza de quando foi corrigido .. Graças a Deus por isso
fonte
Se você alterar sua versão do jQuery para 1.5.1, não precisará ajustar seu código. Então o IE9 ouvirá perfeitamente:
http://code.jquery.com/jquery-1.5.1.min.js
fonte
o truque com o clique funciona ... mas se você deseja obter o estado correto do rádio ou da caixa de seleção, pode usar isso:
fonte
imo usando clique em vez de alterar torna o comportamento ie diferente. Prefiro emular o comportamento do evento de alteração usando um timer (setTimout).
algo como (aviso - código do bloco de notas):
fonte
tente isso, funciona para mim
fonte
Isso pode ajudar alguém: em vez de começar com o ID do formulário, segmente o ID de seleção e envie o formulário com alterações, desta forma:
e o jQuery:
(Obviamente, o botão enviar é opcional, caso o javascript esteja desativado)
fonte
Tente o seguinte:
fonte
Evite usar a função .focus () ou .select () antes da função .change () do jquery para o IE, pois funciona bem, estou usando no meu site.
obrigado
fonte
fonte
Tente usar cada um em vez de alterar / clicar , o que está funcionando bem mesmo na primeira vez no IE e em outros navegadores
Não está trabalhando pela primeira vez
Trabalhando bem mesmo na primeira vez
fonte