Chosen: iPad:li.search-choiceを閉じたり削除したりできません( `click.chosen`イベントは発生しません)

作成日 2018年12月04日  ·  5コメント  ·  ソース: harvesthq/chosen

再現する手順

  1. iPad経由でhttps://harvesthq.github.io/chosen/にアクセスし

  2. 「複数選択」の下に、要素を追加します。

  3. ここで、他の場所をクリックせずに、「x」をクリックして追加された要素を削除します。 何も起こりません。

予想される行動

li.search-choice要素を削除する必要があります。 select.chosen-select option選択を解除する必要があります。

実際の動作

li.search-choice要素は残ります。 select.chosen-select optionは引き続き選択されます。 イベントchosen.clickは発生しません。

環境

  • 選択されたバージョン:1.8.7(選択されたWebサイト上)および〜1

  • jQueryまたはプロトタイプバージョン:3.2.1(選択されたWebサイト上)および2.1.4および2.2.4

  • ブラウザとバージョン:Chrome、バージョン70.0.3538.110(公式ビルド)(64ビット)

  • OSとバージョン:Windows 10、バージョン1709、OSビルド16299.492

追加情報

ブラウザで(コンソールの「デバイスツールバーの切り替え」を介して)機能するが、少し直感的ではない回避策は次のとおりです。

  1. 展開メニューから要素を選択して、 li.search-choice要素を追加します。 注意:「x」をクリックしても何も起こりません。
  2. ウェブサイトの他の場所をクリックしてください。 つまり、選択したフィールドの外側です。
  3. 選択したフィールドをクリックして、検索メニューを展開します。
  4. これで、以前に追加した要素で「x」をクリックできるようになり、クリックすると要素が正しく削除されます。

これは、実際の物理的なiPadでは機能しないようです。

考え

要素が追加されると、クリックが時間内に初期化されないようです。

選択したJavascriptコードをすばやくスキャンすると、クリックに関して次のコアイベントが処理されていることがわかります。

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

表示されないのは、次のイベント処理です。

  • pointerdown
  • pointermove
  • pointerup

おそらくこれは問題に影響を及ぼしますか?

Bug iOS

全てのコメント5件

(少なくともiPadのふりをしているChromeでは)複数選択からアイテムの選択を解除できないことを確認できます。 Xをタップしても何も起こりません。

私は同じ問題に遭遇しました。

選択フィールドからフォーカスアウトする場合(フィールドを閉じるだけでなく、実際には他の要素にフォーカスする場合)、Xボタンはまだ機能しないことがわかりました。 ただし、このフィールドに再び焦点を合わせて(そしてドロップダウンを表示して)、オプションを正常に削除できるようになりました。

ドロップダウンを閉じるとすぐに、Xは機能しなくなります。

これは、Chromeエミュレーターと物理デバイスの両方で再現できます。

明確にするためだけに。 要素から抜け出すことにより、 chosen-container-activeクラスを削除するために.chosen-containerを作成する必要があります。 chosen-container-activechosen-containerから削除され、新しいフォーカスによって再度適用されると、現時点ではうまく機能します。

さて、ここで何が問題なのか正確にはわかりませんが、私はそれをうまく機能させました。

まず、初期化するときに次のオプションを使用します。

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

いくつかの理由で、フィールドに集中していないときにコントロールとの相互作用をブロックすることが選択されています。

フィールドの外側をクリックするとresults_hideが呼び出され、このメソッドはフィールドへのアクセスを完全にブロックすることがわかりました(少なくともモバイル/タブレットでは)。 だから私はこの振る舞いを防ぐ方法を探していました。

results_showingフラグをfalseに設定すると、このバグが発生しているようです。

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;
};

ソースからそれを削除すると(不便ですが、今は他の選択肢はありません)、うまくいくはずです。

これが実際に何をしているのかはわかりませんが、現時点では副作用は見られませんでした。

すべてのモバイルデバイスとタブレットで選択を無効にしました。 組み込みのタッチ選択インターフェイスが、選択した入力ボックスよりもユーザーフレンドリーかどうかはわかりません。 検索オプションがないだけですが、タッチデバイスではとにかく奇妙に感じました。

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;
     };

乾杯
ハネス

このページは役に立ちましたか?
0 / 5 - 0 評価