Eu tenho um objeto com pares de chave / valor de opções que quero ocultar / remover de uma lista de seleção. Nenhum dos seguintes seletores de opção funcionam. o que estou perdendo?
$.each(results['hide'], function(name, title) {
$("#edit-field-service-sub-cat-value option[value=title]").hide();
$("#edit-field-service-sub-cat-value option[@value=title]").hide();
});
jquery
html-select
hitfactory
fonte
fonte
Respostas:
Pelo que vale a pena, a segunda forma (com o
@
) não existe no jQuery 1.3. O primeiro não está funcionando porque aparentemente você está esperando uma interpolação de variável. Experimente isto:Observe que isso provavelmente será interrompido de várias maneiras horríveis se
title
contiver metacaracteres do seletor jQuery.fonte
Você não pode fazer este navegador x. Se bem me lembro, ou seja, tem problemas. A coisa mais fácil a fazer é manter uma cópia clonada do select antes de remover itens; isso permite que você remova facilmente e depois acrescente os itens que faltam de volta.
fonte
Encontrei uma maneira melhor e é muito simples:
Para mostrar novamente, apenas encontre essa opção (não span) e
$("option_you_want_to_show").unwrap()
.Ele foi testado no Chrome e Firefox.
fonte
$("select").val("0").trigger("change")
. A solução mais fácil é estaAqui está meu giro, provavelmente um pouco mais rápido devido aos métodos DOM nativos
fonte
Isso funciona no Firefox 3.0, mas não no MSIE 8, nem no Opera 9.62:
Mas, em vez de ocultar uma opção, pode-se simplesmente desativá-la:
A primeira das duas linhas acima é para o Firefox e passe o foco para a segunda opção (assumindo que tenha o valor = "2"). Se a omitirmos, a opção será desabilitada, mas ainda exibirá a opção "habilitada" antes de ser descartada. Portanto, passamos o foco para outra opção para evitar isso.
fonte
PODE ser feito em qualquer navegador; só precisa de alguma programação personalizada. Por favor, veja meu violino em http://jsfiddle.net/sablefoste/YVMzt/6/ . Ele foi testado para funcionar no Chrome, Firefox, Internet Explorer e Safari.
Resumindo, eu tenho um campo oculto,,
#optionstore
que armazena o array sequencialmente (já que você não pode ter Arrays Associativos em JavaScript). Então, quando você altera a categoria, ele analisa as opções existentes (apenas na primeira vez), grava-as#optionstore
, apaga tudo e coloca de volta apenas aquelas associadas à categoria.NOTA: Eu criei isso para permitir diferentes valores de opção do texto exibido para o usuário, por isso é altamente flexível.
O HTML:
O JavaScript / jQuery:
fonte
resultgood
é simplesmente uma verificação para ver se algumoptionlisting
foi adicionado. se fosse, a lista de<option>
s é retornada. Caso contrário, nada será retornado, que é o que você desejaria se incluísse acidentalmente uma classe que não estava realmente lá (neste exemplo, digamos, sub-Food6). Para retornar um espaço em branco em um menu suspenso, altere a linha de declaração no início da função paravar optionlisting="<option value=''></option>";
.data
atributo; é semanticamente mais correto.Sua melhor aposta é definir disabled = true nos itens de opção que deseja desativar e, em seguida, no conjunto CSS
Dessa forma, mesmo se o navegador não suporta escondendo o item desativado, ele ainda não pode ser selecionado .. mas em navegadores que não suportam-lo, eles serão ocultados.
fonte
Dê uma olhada nesta pergunta e as respostas -
Desativar selecionar opções ...
Olhando para o seu código, pode ser necessário citar o valor do atributo
de seletores de atributo jQuery
EDITAR:
Acabei de perceber que você está obtendo o título do parâmetro de função, caso em que a sintaxe deve ser
fonte
Em referência à sugestão do redsquare, acabei fazendo o seguinte:
e então para reverter isso:
fonte
O problema é que o Internet Explorer não parece suportar os métodos de ocultar e mostrar para selecionar opções. Eu queria ocultar todas as opções do meu ddlReasonCode select que não tinha o tipo selecionado atualmente como o valor do atributo "attType".
Enquanto o adorável Chrome estava bastante satisfeito com:
Isso é o que o IE requer (crianças, não tente fazer isso no CHROME :-)):
Eu encontrei essa ideia de embrulho em http://ajax911.com/hide-options-selecbox-jquery/
fonte
Depois de testadas, as soluções postadas acima por vários, incluindo o caos, para ocultar elementos agora funcionam nas versões mais recentes do Firefox (66.0.4), Chrome (74.0.3729.169) e Edge (42.17134.1.0)
Para o IE, isso não funciona, mas você pode desativar a opção
e então forçar a seleção de um valor diferente.
Observe que para uma opção desabilitada, o valor do menu suspenso agora será nulo, não o valor da opção selecionada se estiver desabilitada.
fonte
Parece que você também precisa atualizar o atributo "selecionado". Caso contrário, a opção atualmente selecionada pode continuar a ser exibida - embora provavelmente desapareça quando você realmente for selecionar uma opção (foi o que fez para mim): Tente fazer isto:
fonte
Eu estava tentando ocultar opções de uma lista de seleção com base na opção selecionada de outra lista de seleção. Estava funcionando no Firefox3, mas não no Internet Explorer 6. Tenho algumas idéias aqui e tenho uma solução agora, então gostaria de compartilhar:
O código JavaScript
O HTML
Foi verificado como funcionando no Firefox 3 e Internet Explorer 6.
fonte
id
atributo deve ser único: id = Este atributo atribui um nome a um elemento. Este nome deve ser único em um documento.Para evitar a concatenação de strings, você pode usar jQuery.grep
fonte
Provavelmente não tão elegante ou reutilizável como um plugin jquery. mas outra abordagem é simplesmente salvar os elementos de opção e trocá-los conforme necessário:
faça isso para usar o objeto:
fonte
Implementei uma solução usando uma função que filtra um combobox (
<select>
) com base em atributos de dados personalizados. Esta solução suporta:<option>
para mostrar quando o filtro deixaria o select vazio.<option>
elementos sem o atributo de filtro de dados são deixados intocados.Testado com jQuery 2.1.4 e Firefox, Chrome, Safari e IE 10+.
Este é o exemplo de HTML:
O código jQuery para a filtragem:
Para usá-lo, basta chamar a função com o valor que deseja manter.
Então, a seleção resultante será:
Os elementos originais são armazenados pela função data (), portanto, as chamadas subsequentes adicionarão e removerão os elementos corretos.
fonte
A resposta indica que
@
é inválido para iterações jQuery mais recentes. Embora isso esteja correto, alguns IEs mais antigos ainda não ocultam elementos de opção. Para quem precisa lidar com a ocultação de elementos de opção nessas versões afetadas, publiquei uma solução alternativa aqui:http://work.arounds.org/issue/96/option-elements-do-not-hide-in-IE/
Basicamente, basta envolvê-lo com uma extensão e substituí-lo na exibição.
fonte
Qualquer pessoa que encontrar essa questão também pode considerar o uso de Escolhidos , que expande muito as capacidades dos selecionados.
fonte
Então, em seu css, certifique-se de ter
fonte
Eu sei que esta pergunta foi respondida. Mas minha exigência era ligeiramente diferente. Em vez de valor, eu queria filtrar por texto. Portanto, modifiquei a resposta de @William Herry assim.
Desta forma, você pode usar o valor também substituindo contém como este
fonte
Para ocultar a opção em uso selecionado :
Onde option_node é HTMLOptionElement
PS: Eu não uso JQuery, mas suponho que funcione:
fonte
Achei melhor apenas remover o DOM completamente.
Compatível com vários navegadores. Funciona no IE11 também
fonte
opção: eq (0) - oculta a opção no índice '0' na caixa de seleção.
fonte
Você pode mostrar / ocultar com valor ou nome de classe . Verifique o link abaixo com um exemplo de trabalho.
Mostra / esconde as opções escolhidas do jquery com valor ou com o nome da classe.
fonte
$ ("# ddtypeoftraining option [value = 5]"). css ("display", "none"); $ ('# ddtypeoftraining'). selectpicker ('atualizar');
fonte