送信後にjavascriptで星付きのフォームをクリーンアップするにはどうすればよいですか?

ウラディスラフ

星とstar_borderの2つのアイコンを持つ星のある単純なフォームがあります(starはマークされたものを表し、star_borderは空を表します)。

フォーム自体は非常に単純です。

<div class="star-input">
    <i class="material-icons">star_border</i>
    <i class="material-icons">star_border</i>
    <i class="material-icons">star_border</i>
    <i class="material-icons">star_border</i>
    <i class="material-icons">star_border</i>
</div>

フォームが読み込まれると、訪問者がそれを押していない間、星はマークされたものと空の状態の間で絶えず変化します。彼がいくつかの星を押すとすぐに、ステータスが凍結され、いくつかの星は塗りつぶされ、他の星は空になります(マークによって異なります)。したがって、このようにしてランキングが形成されます。それは私には明らかです。

ただし、送信後にフォームを初期状態にクリアするための解決策を作成しようとしています。送信後にページをリロードせずに開いた場合、過去の値が保存されたままになります。

JavaScriptの関数コードは次のとおりです。

prepareThemes.prototype.initReviewDialog = function() {
  const dialog = document.querySelector("#dialog-add-review");
  this.dialogs.add_review = new mdc.dialog.MDCDialog(dialog);

  this.dialogs.add_review.listen("MDCDialog:accept", () => {
    let pathname = this.getCleanPath(document.location.pathname);
    let id = pathname.split("/")[2];

    if (
      !dialog.querySelector("#text").value ||
      !dialog.querySelector("#textwhoareyou").value
    ) {
      alert("No text");
      return;
    } else {
      this.addRating(id, {
        rating,
        text: dialog.querySelector("#text").value,
        userName: dialog.querySelector("#textwhoareyou").value,
        timestamp: new Date(),
        userId: firebase.auth().currentUser.uid
      }).then(() => {
        this.rerender();
      });
      dialog.querySelector("#text").value = "";
      dialog.querySelector("#textwhoareyou").value = "";
    }
  });

  let rating = 0;

  dialog.querySelectorAll(".star-input i").forEach(el => {
    const rate = () => {
      let after = false;
      rating = 0;

      [].slice.call(el.parentNode.children).forEach(child => {
        if (!after) {
          rating++;
          child.innerText = "star";
        } else {
          child.innerText = "star_border";
        }
        after = after || child.isSameNode(el);
      });
    };
    el.addEventListener("mouseover", rate);
  });
};

アドバイスありがとうございます。みなさん、こんにちは。

アムル・アリー

簡単な解決策は、フォームの送信後にdivを再構築することです。これにより、次のようなことができます。

 function doRate() {
  document.querySelectorAll('.star-input i').forEach(el => {
const rate = () => {
  let after = false;
  rating = 0;

  [].slice.call(el.parentNode.children).forEach(child => {
    if (!after) {
      rating++;
      child.innerText = 'star';
    } else {
      child.innerText = 'star_border';
    }
    after = after || child.isSameNode(el);
  });
};

el.addEventListener('mouseover', rate);
});
};

doRate();

document.querySelector('#my-form')
  .addEventListener('submit', function(e) {
    e.preventDefault();

    // Do you logic here
 
    // And after that rebuild your div        
    var myDiv = document.querySelector('.star-input');
    myDiv.innerHTML = `
    <i class="material-icons">star_border</i>
    <i class="material-icons">star_border</i>
    <i class="material-icons">star_border</i>
    <i class="material-icons">star_border</i>
    <i class="material-icons">star_border</i>`;
    
    doRate();
  })
  
<link href="https://fonts.googleapis.com/icon?family=Material+Icons"
      rel="stylesheet">
<form id="my-form">
<div class="star-input">
    <i class="material-icons">star_border</i>
    <i class="material-icons">star_border</i>
    <i class="material-icons">star_border</i>
    <i class="material-icons">star_border</i>
    <i class="material-icons">star_border</i>
</div>
<button id="my-button">Rate!</button>
</form>

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

ボタン付きのフォーム送信をクリックで機能するものに変更するにはどうすればよいですか?

分類Dev

PHP、送信後にこのフォームをクリアするにはどうすればよいですか?

分類Dev

フォームの送信後にクリックされたリンクを特定するにはどうすればよいですか?

分類Dev

Xamarinフォームの送信ボタンをクリックした後にXAMLから値を取得するにはどうすればよいですか?

分類Dev

Xamarinフォームの送信ボタンをクリックした後にXAMLから値を取得するにはどうすればよいですか?

分類Dev

ngrxがアクションに成功した後、フォームをクリーンアップするにはどうすればよいですか?

分類Dev

フォームの送信が成功した後、フォームの値をクリアするにはどうすればよいですか?

分類Dev

リクエストプロミス付きのフォームを送信するにはどうすればよいですか?

分類Dev

送信後にフォームから特定のフィールドのみをクリアするにはどうすればよいですか?

分類Dev

送信後に特定のフォームフィールドを1つだけクリアするにはどうすればよいですか?

分類Dev

Django:バックエンドの制限付きフォームセットにフォームを追加するにはどうすればよいですか?

分類Dev

送信ボタンをクリックした後、htmlフォームを非表示にして出力を表示するにはどうすればよいですか?

分類Dev

ユーザーが送信ボタンをクリックしたときにPHPフォームを更新するにはどうすればよいですか?

分類Dev

オプションの追加をクリックしたときに同様のフォームを追加するにはどうすればよいですか?

分類Dev

Winformsアプリケーションで前のフォームをコールバックするにはどうすればよいですか?

分類Dev

ペイロード付きのカスタムメッセージをボットからクライアントアプリケーションにダイレクトライン経由で送信するにはどうすればよいですか?

分類Dev

JavaScriptを使用してファイルのアップロードをキャンセルするにはどうすればよいですか?しかし、男性はAjaxリクエストで残りのフォームフィールドを送信できます

分類Dev

Androidでデフォルトをクリックした後にアプリケーションを終了するにはどうすればよいですか?

分類Dev

アプリのトゥームストーンの後にストップウォッチを実行するにはどうすればよいですか?

分類Dev

ボタンがクリックされたときにフォームをクリアするにはどうすればよいですか?

分類Dev

フォームをアクションにリンクするにはどうすればよいですか?

分類Dev

送信ボタンがクリックされた後、個人のWebサイトに埋め込まれたタイプフォームWebページをリダイレクトするにはどうすればよいですか?

分類Dev

フォームの送信を最後まで停止するにはどうすればよいですか?

分類Dev

ベンダープレフィックス付きのフォーカスボーダーを削除するにはどうすればよいですか?

分類Dev

フォームを送信するときにフォームの検証(のみ)をトリガーするにはどうすればよいですか?

分類Dev

jqueryでフォームを送信する前に2つの特定のクリックを区別するにはどうすればよいですか?

分類Dev

フォームを送信した後に別のHTMLページにリダイレクトするにはどうすればよいですか?

分類Dev

Railsでフォームを送信した後、チェックボックスの値を保持するにはどうすればよいですか?

分類Dev

フォームの送信ではなく、クライアント側でファイルのアップロードをトリガーするにはどうすればよいですか?

Related 関連記事

  1. 1

    ボタン付きのフォーム送信をクリックで機能するものに変更するにはどうすればよいですか?

  2. 2

    PHP、送信後にこのフォームをクリアするにはどうすればよいですか?

  3. 3

    フォームの送信後にクリックされたリンクを特定するにはどうすればよいですか?

  4. 4

    Xamarinフォームの送信ボタンをクリックした後にXAMLから値を取得するにはどうすればよいですか?

  5. 5

    Xamarinフォームの送信ボタンをクリックした後にXAMLから値を取得するにはどうすればよいですか?

  6. 6

    ngrxがアクションに成功した後、フォームをクリーンアップするにはどうすればよいですか?

  7. 7

    フォームの送信が成功した後、フォームの値をクリアするにはどうすればよいですか?

  8. 8

    リクエストプロミス付きのフォームを送信するにはどうすればよいですか?

  9. 9

    送信後にフォームから特定のフィールドのみをクリアするにはどうすればよいですか?

  10. 10

    送信後に特定のフォームフィールドを1つだけクリアするにはどうすればよいですか?

  11. 11

    Django:バックエンドの制限付きフォームセットにフォームを追加するにはどうすればよいですか?

  12. 12

    送信ボタンをクリックした後、htmlフォームを非表示にして出力を表示するにはどうすればよいですか?

  13. 13

    ユーザーが送信ボタンをクリックしたときにPHPフォームを更新するにはどうすればよいですか?

  14. 14

    オプションの追加をクリックしたときに同様のフォームを追加するにはどうすればよいですか?

  15. 15

    Winformsアプリケーションで前のフォームをコールバックするにはどうすればよいですか?

  16. 16

    ペイロード付きのカスタムメッセージをボットからクライアントアプリケーションにダイレクトライン経由で送信するにはどうすればよいですか?

  17. 17

    JavaScriptを使用してファイルのアップロードをキャンセルするにはどうすればよいですか?しかし、男性はAjaxリクエストで残りのフォームフィールドを送信できます

  18. 18

    Androidでデフォルトをクリックした後にアプリケーションを終了するにはどうすればよいですか?

  19. 19

    アプリのトゥームストーンの後にストップウォッチを実行するにはどうすればよいですか?

  20. 20

    ボタンがクリックされたときにフォームをクリアするにはどうすればよいですか?

  21. 21

    フォームをアクションにリンクするにはどうすればよいですか?

  22. 22

    送信ボタンがクリックされた後、個人のWebサイトに埋め込まれたタイプフォームWebページをリダイレクトするにはどうすればよいですか?

  23. 23

    フォームの送信を最後まで停止するにはどうすればよいですか?

  24. 24

    ベンダープレフィックス付きのフォーカスボーダーを削除するにはどうすればよいですか?

  25. 25

    フォームを送信するときにフォームの検証(のみ)をトリガーするにはどうすればよいですか?

  26. 26

    jqueryでフォームを送信する前に2つの特定のクリックを区別するにはどうすればよいですか?

  27. 27

    フォームを送信した後に別のHTMLページにリダイレクトするにはどうすればよいですか?

  28. 28

    Railsでフォームを送信した後、チェックボックスの値を保持するにはどうすればよいですか?

  29. 29

    フォームの送信ではなく、クライアント側でファイルのアップロードをトリガーするにはどうすればよいですか?

ホットタグ

アーカイブ