0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ion-searchbarでcloseボタンのアクションをユーザフレンドリーにする方法

Last updated at Posted at 2022-12-05

Ionic Frameworkを使っていると、 ion-searchbar を利用する場面も多いでしょう。多くのリストから絞り込む用途に使われることがほとんどなのですが、実際ユーザとして使っているとひとつの問題があります。それは、closeボタンを押下しても、 ion-searchbar にフォーカスされたままの状態になることです。

49f09cc0f0d654254dcda801df5f32aa.gif

closeボタンを押下しても、カーソルが残っていることがわかるかと思います。これは外部キーボードを利用している時は問題になりませんが、モバイルデバイスでオンスクリーンキーボードを利用してる時は問題になります。

closeボタンを押下してもオンスクリーンキーボードは立ち上がったままです。

もちろんこれにはシナリオが2つあります。

  • 入力内容をすべて消去して、別のキーワードを入力したい
  • 入力内容をすべて消去して、すべてのリストを表示したい

前者だとキーボードが立ち上がったままなのは問題ありませんが(Twitterの絞り込み検索のような場合)、在庫管理などで一時的に絞り込むシナリオを描いていた場合は、そのシナリオに沿うとユーザは

  1. closeボタンを押下したあと
  2. どこか別のエリアをタップしてフォーカスを外してキーボードを非表示にする

というプロセスを踏むことになります。これは手間ですよね。

なので、後者のシナリオの場合はこのように実装しましょう。

<ion-toolbar>
  <ion-searchbar
    (ionClear)="searchbarBlur()"
  >
</ion-toolbar>
public async searchbarBlur() {
  setTimeout(() => (document.activeElement as HTMLElement).blur(), 100);
}

document.activeElement は、DOM内で現在フォーカスを持っている要素を返します。

またsetTimeoutをいれているのは、closeボタンをタップすることにより ion-searchbar もタップしたことになり、ミリセカンド秒後にフォーカスがあたるので、必ずフォーカスが当たったあとにフォーカスを外すためです。

これで、closeボタンをタップしたらフォーカスが必ず外れて、キーボードが非表示になるようになりました。簡単ですね。

それではまた。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?