Chosen: iPad: Não é possível fechar / remover li.search-choice (o evento `click.chosen` nunca dispara)

Criado em 4 dez. 2018  ·  5Comentários  ·  Fonte: harvesthq/chosen

Passos para reproduzir

  1. Acesse https://harvesthq.github.io/chosen/ via iPad. Também reproduzível através da "barra de ferramentas Alternar dispositivo" no console do Chrome e, em seguida, selecionando o dispositivo "iPad".

  2. Em "Seleção múltipla", adicione um elemento.

  3. Agora - sem clicar em outro lugar - clique no "x" para remover o elemento adicionado. Nada acontece.

Comportamento esperado

li.search-choice deve ser removido. select.chosen-select option deve ser desmarcado.

Comportamento real

li.search-choice fica. select.chosen-select option continua a ser selecionado. O evento chosen.click nunca é acionado.

Meio Ambiente

  • Versão escolhida : 1.8.7 (no site escolhido) e ~ 1

  • Versão jQuery ou Protótipo : 3.2.1 (no site escolhido) e 2.1.4 e 2.2.4

  • Navegador e versão : Chrome, versão 70.0.3538.110 (versão oficial) (64 bits)

  • SO e versão : Windows 10, versão 1709, OS Build 16299.492

Informação adicional

Uma solução alternativa que funciona em navegadores (por meio de "Alternar barra de ferramentas do dispositivo" no Console), mas não é nem um pouco intuitiva, é:

  1. Selecione um elemento do menu de desdobramento para que o elemento li.search-choice seja adicionado. Aviso: clicar em "x" ainda não faz nada.
  2. Clique em outro lugar no site; ou seja, fora do campo escolhido.
  3. Clique no campo escolhido para que o menu de pesquisa se desdobre.
  4. Agora o "x" pode ser clicado no elemento adicionado anteriormente e clicar nele corretamente remove o elemento.

Isso não parece funcionar em um iPad físico real.

Pensamentos

Parece que o clique nem mesmo é inicializado no devido tempo quando um elemento é adicionado.

Verificando rapidamente o código Javascript escolhido, vejo que os seguintes eventos principais - com relação ao clique - estão sendo manipulados:

  • mousedown
  • mousemove
  • mouseup
  • touchstart
  • touchmove
  • touchend

O que não vejo é o tratamento de eventos para:

  • pointerdown
  • pointermove
  • pointerup

Talvez isso tenha influência sobre o assunto?

Bug iOS

Todos 5 comentários

Pode confirmar que (pelo menos no Chrome fingindo ser um iPad) você não pode desmarcar itens de uma seleção múltipla. Tocar no X não faz nada.

Eu me deparei com o mesmo problema.

Descobri que se você focar fora do campo de seleção (não apenas fechar o campo, mas realmente focar em qualquer outro elemento), os botões X ainda não funcionam. Mas em você se concentrará neste campo novamente (e exibirá o menu suspenso), agora você pode excluir opções com êxito.

Assim que você fecha o menu suspenso, novamente, o X não está funcionando.

Posso reproduzir isso no emulador do Chrome e no dispositivo físico.

apenas para deixar claro. Ao sair do elemento, você precisa fazer .chosen-container para eliminar a classe chosen-container-active . Quando chosen-container-active é removido de chosen-container e aplicado novamente com um novo enfoque, funciona bem neste momento.

Ok, não tenho certeza do que exatamente é um problema aqui, mas fiz funcionar para mim.

Primeiro, estou usando essas opções ao inicializar:

el.chosen({
    display_selected_options: false,
    hide_results_on_select: false,
});

Por alguns motivos, o escolhido está bloqueando todas as interações com os controles quando você não está focado em um campo.

Descobri que quando você clica fora do campo results_hide é chamado, e esse método bloqueia completamente o acesso do campo (pelo menos no celular / tablet). Então, eu estava procurando uma maneira de evitar esse comportamento.

Parece que definir o sinalizador results_showing como falso está causando esse bug.

Chosen.prototype.results_hide = function() {
  if (this.results_showing) {
    this.result_clear_highlight();
    this.container.removeClass("chosen-with-drop");
    this.form_field_jq.trigger("chosen:hiding_dropdown", {
      chosen: this
    });
  }
  // removed because of mobile issue with removeing options
  // return this.results_showing = false;
};

Removê-lo da fonte (inconveniente, mas nenhuma outra escolha agora) deve resolver o problema.

Não tenho certeza do que isso está realmente fazendo, mas no momento não notei nenhum efeito colateral.

Acabei de desabilitar o escolhido para todos os dispositivos móveis e tablets. Não sei se a interface de seleção por toque integrada é mais amigável do que a caixa de entrada escolhida. Só faltando a opção de pesquisa, mas parecia estranho em um dispositivo de toque.

Linha 590:

    AbstractChosen.browser_is_supported = function() {
      if ("Microsoft Internet Explorer" === window.navigator.appName) {
        return document.documentMode >= 8;
      }
      if (/iP(od|hone)/i.test(window.navigator.userAgent) || /IEMobile/i.test(window.navigator.userAgent) || /Windows Phone/i.test(window.navigator.userAgent) || /BlackBerry/i.test(window.navigator.userAgent) || /BB10/i.test(window.navigator.userAgent) || /Android.*Mobile/i.test(window.navigator.userAgent)) {
        return false;
      }
      if ((/iPhone|iPod|iPad|Android|android|playbook|silk|BlackBerry/).test(navigator.userAgent))
      {
        return false;
      }
      if (/Android/i.test(window.navigator.userAgent)) {
        if (/Mobile/i.test(window.navigator.userAgent)) {
          return false;
        }
       }
       return true;
     };

Saúde
Hannes

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

gandarez picture gandarez  ·  5Comentários

alexfrancavilla picture alexfrancavilla  ·  9Comentários

SFPink picture SFPink  ·  4Comentários

engintekin picture engintekin  ·  8Comentários

blankhang picture blankhang  ·  7Comentários