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?

あの日見た""の理由を僕はまだ知らない

Last updated at Posted at 2024-10-22

こちらの記事ですが、コメントにて有識者による解説を頂けましたので、究極的な原因を知りたい方はそちらを参照してください。

始まりは自己紹介から

初めまして あおげばにゃんこです。
最近JSにこなれ感を出しつつコード書いていた矢先に悲劇が起きましたので、ご報告です。

data属性に「""」がついてくる

普段はrailsで開発を行っているのですが、HTMLのdata属性にデータを入れておいて取り出そうとした際にある問題が生じました。

発生した問題は以下のとおりです。

<input type="checkbox" name="type" id="birthday" data-status=""2024-10-03"">

お気づきになりましたか?

謎の「""」がついてますよね? 
こいつはいったい何者なんだと
そう思うのが自然の摂理です。

今回はこちらの直接的な原因について記事を書きます。
※究極的な原因であるhtmlやrails,jsのことについては詳しく述べません

原因はなんぞや

まずは我々が望む美しい理想形を確認してみましょう。

<input type="checkbox" name="type" id="birthday" data-status="2024-10-03">

いかがですか?
実に綺麗でしょう。

それでは再度自身の構造を確認してみましょう。

<input type="checkbox" name="type" id="birthday" data-status=""2024-10-03"">

汚いですね〜
1週間お風呂入ってないのかな?ってくらい汚いですよね?

さて、それではこちらの構造の元になったコードを見てみましょう。

""がついてる方

 = check_box_tag 'type', 'birthday', false, id: "birthday", data: { status: birthday }

""がついていない方

= check_box_tag 'type', 'happy', false, id: "happy", data: { status: "#{(@user.birthday )}" }

お気づきになりましたか?

そうです。上は剥き出しの変数のまま、下は式展開を使った文字列なのです。

つまり、data属性にはちゃんと文字列を渡してあげないとhtml側?がエスケープ処理を行い正しく認識されないのです!!!
(たぶん文字列)

今回のまとめ

つまりdata属性にrailsからデータを渡す場合はちゃんと文字列にしてあげることが重要なのです!

今回の記事が誰かの役に立てば幸いです。

余談

この記事を書く前に色々調べてみたのですが、jQueryだとdata属性からデータを取得する際に勝手に型を変換してくれるそうです。
ソースについてはご自身で調べていただければと思います。

0
0
2

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?