React制御コンポーネントのクリックでデータリスト入力をクリア

マット・フライ

React制御コンポーネント内に関連するデータリストを含むhtml5入力があります。入力フィールドがクリックされたとき、またはフォーカスを受け取ったときにテキストをクリアして、すべてのオプションが表示されて選択できるようにしたい。私はこの質問でアルフレッドの優れた答えに従いましたが、React制御コンポーネントでまったく同じ結果を達成することはできません。残念ながら、onClickハンドラー内でblurを呼び出すと、フォーカスが(もちろん)失われるため、ユーザーが複数の文字を入力できなくなります。

ユーザーがテキストを入力してクリアし、テキストボックスがクリックされるたびにオプションの完全なセットを表示する機能を維持するにはどうすればよいですか?

import React, { useState } from "react";

const MyForm = () => {
  const [options, setOptions] = useState(["Apples", "Oranges", "Bananas", "Grapes"]);

  const handleChange = (event) => {
    event.target.blur();
  };

  const clear = (event) => {
    event.target.value = "";
  };

  return (
    <>
      <input
        type="input"
        list="optionsList"
        onChange={handleChange}
        onFocus={clear}
        placeholder="Select an option"
      />
      <datalist id="optionsList">
        {options.map((o) => (
          <option key={o}>{o}</option>
        ))}
      </datalist>
    </>
  );
};

export default MyForm;

onFocusではなくclearonClickを呼び出すバージョンも試したことに注意してください。これにより、handleChangesでblur()を呼び出す必要がなくなり、タイピングの問題が解決されます。ただし、ボックスがクリアされる前にオプションのリストが表示されているように見えるため、オプションの完全なセットを表示するには、2回クリックする必要があります。

アルフレッド

私の質問の1つについてあなたのコメントを見たので、代わりにここに回答として投稿すると思いました。

あなたのユースケースに基づいて、これがあなたが必要だと思うものです

import React, { useState } from "react";

const MyForm = () => {
  const [options, setOptions] = useState(["Apples", "Oranges", "Bananas", "Grapes"]);

  const handleChange = (event) => {
    if (!event.nativeEvent.inputType) {
      event.target.blur();
    }
  };

  const clear = (event) => {
    event.target.value = "";
  };

  return (
    <>
      <input
        type="input"
        list="optionsList"
        onChange={handleChange}
        onClick={clear}
        onFocus={clear}
        placeholder="Select an option"
      />
      <datalist id="optionsList">
        {options.map((o) => (
          <option key={o}>{o}</option>
        ))}
      </datalist>
    </>
  );
};

export default MyForm;

handleChangeテキスト入力が正常にブロックされないようにするにはevent.nativeEvent.inputType、をonChangeクリックしトリガーされたdatalistものにはinputTypeがないためを確認する必要があります。したがって、この場合、入力ブラーは、入力されたときにのみ実行されdatalist、他のイベントのフォーカスを維持します。

またonClick、入力がすでにフォーカスされているかどうかに関係なく、入力をクリアするためのハンドラーを追加しました

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ステートレスReactコンポーネントの入力をクリア

分類Dev

ボタンクリック時に入力変数を別のコンポーネントに角度で渡す

分類Dev

SSISスクリプトコンポーネントの入力

分類Dev

PCコンポーネント(CPU、メモリ、ディスクなど)の電力(ワット)をリアルタイムで測定する方法は?

分類Dev

SlideTextInput(カスタムTextInputコンポーネント)の入力をクリアする方法は?

分類Dev

ReactHooksで親のボタンクリックで子コンポーネントの入力にフォーカスを設定する方法

分類Dev

親コンポーネントからの入力をクリアするReactJS

分類Dev

ジェネリックコンポーネント入力はインターフェースを強制します-Angular

分類Dev

ReactNativeで送信ボタンをクリックするとテキスト入力データをクリア

分類Dev

機能コンポーネントとフックを備えたReactアプリのデータフロー

分類Dev

コンポーネントの小道具に参照を渡し、React.createElementを使用してdivクリックで入力要素にフォーカスします

分類Dev

親から入力VUEコンポーネントデータをクリアする

分類Dev

GETリクエストのデータをreactで使用し、子コンポーネントで使用する

分類Dev

Reactのボタンクリックでコンポーネントをレンダリングする方法は?

分類Dev

別のコンポーネントでボタンのクリックをリッスンする方法

分類Dev

Reactコンポーネントは、制御対象のチェックボックスタイプの制御されていない入力を変更しています

分類Dev

Reactでクリックイベントをあるクラスコンポーネントから別のクラスコンポーネントに渡す

分類Dev

ボタンクリックでCRUDアプリのコンポーネントを削除できません

分類Dev

フォーム入力フィールドをリセットできません(React JS制御コンポーネント)

分類Dev

ボタンクリックで前のコンポーネントにリダイレクト(React Routing)

分類Dev

子コンポーネントと親コンポーネントの間でデータを渡すことなく、「フェッチ」リクエストをReactアプリのどこに配置する必要がありますか?

分類Dev

sqlite3データベーステーブルのすべての行からのデータをリストに入力できません、エラー:トレース/ブレークポイントトラップ(コアダンプ)

分類Dev

コンポーネントが、ReactJSで制御されるタイプチェックボックスの制御されていない入力を変更しています

分類Dev

別のコントローラーでテキスト入力をクリア

分類Dev

React:関数コンポーネントでリンクがクリックされたときに入力ファイルを取得します

分類Dev

react jsでイベント(ボタンクリック)時にコンポーネントを別のコンポーネントに置き換える方法

分類Dev

ステートレスReactコンポーネントのボタンクリックで入力の値を取得するにはどうすればよいですか?

分類Dev

React-router-クリックしたリンクに応じて、コンポーネントに挿入するデータを選択します

分類Dev

クライアントからの入力としてエポックタイムスタンプを使用するPostgresデータクエリ?

Related 関連記事

  1. 1

    ステートレスReactコンポーネントの入力をクリア

  2. 2

    ボタンクリック時に入力変数を別のコンポーネントに角度で渡す

  3. 3

    SSISスクリプトコンポーネントの入力

  4. 4

    PCコンポーネント(CPU、メモリ、ディスクなど)の電力(ワット)をリアルタイムで測定する方法は?

  5. 5

    SlideTextInput(カスタムTextInputコンポーネント)の入力をクリアする方法は?

  6. 6

    ReactHooksで親のボタンクリックで子コンポーネントの入力にフォーカスを設定する方法

  7. 7

    親コンポーネントからの入力をクリアするReactJS

  8. 8

    ジェネリックコンポーネント入力はインターフェースを強制します-Angular

  9. 9

    ReactNativeで送信ボタンをクリックするとテキスト入力データをクリア

  10. 10

    機能コンポーネントとフックを備えたReactアプリのデータフロー

  11. 11

    コンポーネントの小道具に参照を渡し、React.createElementを使用してdivクリックで入力要素にフォーカスします

  12. 12

    親から入力VUEコンポーネントデータをクリアする

  13. 13

    GETリクエストのデータをreactで使用し、子コンポーネントで使用する

  14. 14

    Reactのボタンクリックでコンポーネントをレンダリングする方法は?

  15. 15

    別のコンポーネントでボタンのクリックをリッスンする方法

  16. 16

    Reactコンポーネントは、制御対象のチェックボックスタイプの制御されていない入力を変更しています

  17. 17

    Reactでクリックイベントをあるクラスコンポーネントから別のクラスコンポーネントに渡す

  18. 18

    ボタンクリックでCRUDアプリのコンポーネントを削除できません

  19. 19

    フォーム入力フィールドをリセットできません(React JS制御コンポーネント)

  20. 20

    ボタンクリックで前のコンポーネントにリダイレクト(React Routing)

  21. 21

    子コンポーネントと親コンポーネントの間でデータを渡すことなく、「フェッチ」リクエストをReactアプリのどこに配置する必要がありますか?

  22. 22

    sqlite3データベーステーブルのすべての行からのデータをリストに入力できません、エラー:トレース/ブレークポイントトラップ(コアダンプ)

  23. 23

    コンポーネントが、ReactJSで制御されるタイプチェックボックスの制御されていない入力を変更しています

  24. 24

    別のコントローラーでテキスト入力をクリア

  25. 25

    React:関数コンポーネントでリンクがクリックされたときに入力ファイルを取得します

  26. 26

    react jsでイベント(ボタンクリック)時にコンポーネントを別のコンポーネントに置き換える方法

  27. 27

    ステートレスReactコンポーネントのボタンクリックで入力の値を取得するにはどうすればよいですか?

  28. 28

    React-router-クリックしたリンクに応じて、コンポーネントに挿入するデータを選択します

  29. 29

    クライアントからの入力としてエポックタイムスタンプを使用するPostgresデータクエリ?

ホットタグ

アーカイブ