1
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.

お題は不問!Qiita Engineer Festa 2023で記事投稿!

form_tag要素の発火を細かく指定するには

Last updated at Posted at 2023-06-19

環境

Rails5.2
Vagrant + Ubuntu20.4
JavaScript

内容

ファイルを選択するダイアログ画面を表示するとき、Viewの中で下記のような記述をします。idは、form_tag、file_field_tag、submit_tagの各要素にそれぞれ設定することができます。

index.html.slim
.form-group.row
    = form_tag xxxxx_path, multipart: true, class: 'mb-3', id: 'tag_form' do 
        = file_field_tag :file, id: 'tag_file'
        = submit_tag "実行", class: 'btn btn-primary', id: 'tag_submit'

上記のコードを動かすと下記のように表示されます。
スクリーンショット 2023-06-19 131846.png

3種類の要素でそれぞれクリックイベントを発火させた場合、どこのロジックに入ってくるか確認してみます。

xxxxx.js
document.addEventListener('turbolinks:load', function() {
    document.getElementById('tag_form').addEventListener('click', function() {
        alert("クリック1");
    })

    document.getElementById('tag_file').addEventListener('click', function() {
        alert("クリック2");
    })

    document.getElementById('tag_submit').addEventListener('click', function() {
        alert("クリック3");
    })
}, false)

《ファイルを選択》をクリックすると、下記の2つのアラートが表示されます。つまり、file_field_tag要素、form_tag要素の順番でイベントが発火しています。

ファイルクリック1回目.png

ファイルクリック2回目.png

《実行》をクリックすると、下記の2つのアラートが表示されます。つまり、submit_tag要素、form_tag要素の順番でイベントが発火しています。

実行クリック1回目.png

実行クリック2回目.png

まとめ

  • 《ファイルを選択》、《実行》のどちらをクリックしても、同じイベントを発火させたい場合は、form_tag要素のidを指定します。

  • 《ファイルを選択》をクリックしたときだけイベントを発火させたい場合は、file_field_tag要素のidを指定します。

  • 《実行》をクリックしたときだけイベントを発火させたい場合は、submit_tag要素のidを指定します。

1
0
4

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
1
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?