現状
PAYJPを用いて、購入機能を実装したいと思っています。クレジットカードの情報をトークン化する為に、ますはJavaScriptでhtml.erbの要素を取得したいので以下の記述を行いました。
JavaScriptは学習して2日しか経っていません。
取得したい要素はform_withメソッドのidのcarge_formです。
JavaScript
1const pay = () => { 2 const charge_form = document.getElementById("charge-form"); 3 charge_form.addEventListener("click", (e) => { 4 e.preventDefault(); 5 console.log("フォーム送信時にイベント発火"); 6 }); 7}; 8window.addEventListener("load", pay);
Ruby
1<%= form_with(model: @order_form, url: item_orders_path, method: :post, local: true) do |form| %> 2<%= render 'shared/error_messages', model: @order_form %> 3<%= render "shared/second-header"%> 4 5<div class='transaction-contents'> 6 <div class='transaction-main'> 7 <h1 class='transaction-title-text'> 8 購入内容の確認 9 </h1> 10 <% @items.each do |item| %> 11 <div class='buy-item-info'> 12 <%= image_tag item.image, class: 'buy-item-img' %> 13 <div class='buy-item-right-content'> 14 <h2 class='buy-item-text'> 15 <%= item.title %> 16 </h2> 17 <div class='buy-item-price'> 18 <p class='item-price-text'>¥<%= item.item_price %></p> 19 <p class='item-price-sub-text'><%= item.shipping_fee.name %></p> 20 </div> 21 </div> 22 </div> 23 24 <div class='item-payment'> 25 <h1 class='item-payment-title'> 26 支払金額 27 </h1> 28 <p class='item-payment-price'> 29 ¥<%= item.item_price %> 30 </p> 31 </div> 32 <%end%> 33 34 <%= form_with(mode: @order_form, local: true, url: item_orders_path, id: 'charge-form', class: 'transaction-form-wrap') do |f| %> 35 <%# カード情報の入力 %> 36 <div class='credit-card-form'> 37 <h1 class='info-input-haedline'> 38 クレジットカード情報入力 39 </h1> 40 <div class="form-group"> 41 <div class='form-text-wrap'> 42 <label class="form-text">カード情報</label> 43 <span class="indispensable">必須</span> 44 </div> 45 <%= f.text_field :number, class:"input-default", id:"card-number", placeholder:"カード番号(半角英数字)", maxlength:"16" %> 46 <div class='available-card'> 47 <%= image_tag 'card-visa.gif', class: 'card-logo'%> 48 <%= image_tag 'card-mastercard.gif', class: 'card-logo'%> 49 <%= image_tag 'card-jcb.gif', class: 'card-logo'%> 50 <%= image_tag 'card-amex.gif', class: 'card-logo'%> 51 </div> 52 </div> 53 <div class="form-group"> 54 <div class='form-text-wrap'> 55 <label class="fo-text">有効期限</label> 56 <span class="indispensable">必須</span> 57 </div> 58 <div class='input-expiration-date-wrap'> 59 <%= f.text_area :exp_month, class:"input-expiration-date", id:"card-exp-month", placeholder:"例)3" %> 60 <p>月</p> 61 <%= f.text_area :exp_year, class:"input-expiration-date", id:"card-exp-year", placeholder:"例)23" %> 62 <p>年</p> 63 </div> 64 </div> 65 <div class="form-group"> 66 <div class='form-text-wrap'> 67 <label class="form-text">セキュリティコード</label> 68 <span class="indispensable">必須</span> 69 </div> 70 <%= f.text_field :cvc,class:"input-default", id:"card-cvc", placeholder:"カード背面4桁もしくは3桁の番号", maxlength:"4" %> 71 </div> 72 </div> 73 <%# /カード情報の入力 %> 74 75 <%# 配送先の入力 %> 76 <div class='shipping-address-form'> 77 <h1 class='info-input-haedline'> 78 配送先入力 79 </h1> 80 <div class="form-group"> 81 <div class='form-text-wrap'> 82 <label class="form-text">郵便番号</label> 83 <span class="indispensable">必須</span> 84 </div> 85 <%= f.text_field :post_num, class:"input-default", id:"postal-code", placeholder:"例)123-4567", maxlength:"8" %> 86 </div> 87 <div class="form-group"> 88 <div class='form-text-wrap'> 89 <label class="form-text">都道府県</label> 90 <span class="indispensable">必須</span> 91 </div> 92 <%= f.collection_select(:prefecture_id, Prefecture.all, :id, :name, {}, {class:"select-box", id:"prefecture"}) %> 93 </div> 94 <div class="form-group"> 95 <div class='form-text-wrap'> 96 <label class="form-text">市区町村</label> 97 <span class="indispensable">必須</span> 98 </div> 99 <%= f.text_field :city, class:"input-default", id:"city", placeholder:"例)横浜市緑区"%> 100 </div> 101 <div class="form-group"> 102 <div class='form-text-wrap'> 103 <label class="form-text">番地</label> 104 <span class="indispensable">必須</span> 105 </div> 106 <%= f.text_field :street_num, class:"input-default", id:"addresses", placeholder:"例)青山1-1-1"%> 107 </div> 108 <div class="form-group"> 109 <div class='form-text-wrap'> 110 <label class="form-text">建物名</label> 111 <span class="form-any">任意</span> 112 </div> 113 <%= f.text_field :building_num, class:"input-default", id:"building", placeholder:"例)柳ビル103"%> 114 </div> 115 <div class="form-group"> 116 <div class='form-text-wrap'> 117 <label class="form-text">電話番号</label> 118 <span class="indispensable">必須</span> 119 </div> 120 <%= f.text_field :tell_num, class:"input-default", id:"phone-number", placeholder:"例)09012345678",maxlength:"11"%> 121 </div> 122 </div> 123 <%# /配送先の入力 %> 124 <div class='buy-btn'> 125 <%= f.submit "購入" ,class:"buy-red-btn" %> 126 </div> 127 <% end %> 128 </div> 129</div> 130<%= render "shared/second-footer"%> 131<% end %>
エラー内容
Uncaught TypeError: Cannot read property 'addEventListener' of null
仮説内容
nullが返されているので、要素がなくaddEventListenerの反応ができないと考えています。
form_withの記述が誤りで要素が取得できないのかと思いましたが、これで大丈夫ではないかと思いました。
調べてみても限界です。
実現したいこと
html.erbの要素を取得したいです。しかしform_withメソッドの要素を取得することができない,nullが返ることを改善したいです。
改善策やアドバイスをいただけないでしょうか?宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。