FROM CACHE - jp_header
このコミュニティはピアツーピアサポートに移行しました。Shopify サポートは今後、このコミュニティへのサービスを提供いたしません。これからもぜひ、他のマーチャントやパートナーとつながり、サポートし合い、経験を共有してください。 当社の行動規範に違反する行動や削除を希望するコンテンツがありましたら、引き続きご報告ください

Re: line-item-property入力制限

解決済

line-item-property入力制限

mottu-yurufuwa
Shopify Partner
12 0 1

お世話になります。

line-item-propertyの入力値を半角英数字限定にしたく、

以下のように商品ページにフォームを入れましたが、半角英数字で絞ることができません。

 

<p class="line-item-property__field">
<label for="">メッセージの内容を入力してください(20文字以内/アルファベットのみ)</label><br>
<input form="product-form-{{ section.id }}" id="" type="text" name="properties[メッセージ]" maxlength="20" pattern="^[a-zA-Z]+$">
</p>

 

こちらはShopify特有でできないのでしょうか?

もしできる案がありましたら、ご教授くださると幸いです。

 

よろしくお願いいたします。

1 件の受理された解決策

NIIGAKI_HYUGA
Shopify Partner
54 24 16

成功

初めまして。新垣です。

 

こちらはShopify特有でできないのでしょうか?


→弊テストストアで試してみましたが、そのようです。おそらく、line-item-propertyの追加、商品のカートへの追加等複雑な動きが絡み合うのでpattern属性が機能しなくなってしまうのではないかと思います。

代替案として、JSを用いた制御方法がありますので下記参考ください。

 

<p class="line-item-property__field">
                  <label for="message-input"
                    >メッセージの内容を入力してください(20文字以内/アルファベットと数字のみ)</label
                  ><br>
                  <input
                    form="product-form-{{ section.id }}"
                    id="message-input"
                    type="text"
                    name="properties[メッセージ]"
                    maxlength="20"
                  >
                  <span id="message-error" style="color: red; display: none;"
                    >エラー: 半角英数字のみ入力してください。</span
                  >
                </p>

                <script>
                  document.addEventListener('DOMContentLoaded', function() {
                      var messageInput = document.getElementById('message-input');
                      var errorMessage = document.getElementById('message-error');
                      var submitButton = document.getElementsByClassName("product-form__buttons")[0];

                      // 入力値の変更を監視
                      messageInput.addEventListener('input', function() {
                          var value = messageInput.value;
                          if (!/^[A-Za-z0-9]*$/.test(value)) {
                              // 半角英数字でない場合はエラーを表示し、ボタンを非表示に
                              errorMessage.style.display = 'block';
                              submitButton.style.display = 'none';
                          } else {
                              // エラーがない場合はエラーメッセージを非表示にし、ボタンを表示
                              errorMessage.style.display = 'none';
                              submitButton.style.display = 'block';
                          }
                      });
                  });
                </script>

 

スクリーンショット 2023-12-28 20.57.36.pngスクリーンショット 2023-12-28 20.57.29.png

Freelance Solution Engineer | 新垣
JavaScript Liquid Theme, React Remix App
投稿は参考になりましたか?「いいね!」でお教えください。
解決しない場合、個別に対応も可能ですのでプロフィールからお気軽にメッセージください

元の投稿で解決策を見る

3件の返信3

NIIGAKI_HYUGA
Shopify Partner
54 24 16

成功

初めまして。新垣です。

 

こちらはShopify特有でできないのでしょうか?


→弊テストストアで試してみましたが、そのようです。おそらく、line-item-propertyの追加、商品のカートへの追加等複雑な動きが絡み合うのでpattern属性が機能しなくなってしまうのではないかと思います。

代替案として、JSを用いた制御方法がありますので下記参考ください。

 

<p class="line-item-property__field">
                  <label for="message-input"
                    >メッセージの内容を入力してください(20文字以内/アルファベットと数字のみ)</label
                  ><br>
                  <input
                    form="product-form-{{ section.id }}"
                    id="message-input"
                    type="text"
                    name="properties[メッセージ]"
                    maxlength="20"
                  >
                  <span id="message-error" style="color: red; display: none;"
                    >エラー: 半角英数字のみ入力してください。</span
                  >
                </p>

                <script>
                  document.addEventListener('DOMContentLoaded', function() {
                      var messageInput = document.getElementById('message-input');
                      var errorMessage = document.getElementById('message-error');
                      var submitButton = document.getElementsByClassName("product-form__buttons")[0];

                      // 入力値の変更を監視
                      messageInput.addEventListener('input', function() {
                          var value = messageInput.value;
                          if (!/^[A-Za-z0-9]*$/.test(value)) {
                              // 半角英数字でない場合はエラーを表示し、ボタンを非表示に
                              errorMessage.style.display = 'block';
                              submitButton.style.display = 'none';
                          } else {
                              // エラーがない場合はエラーメッセージを非表示にし、ボタンを表示
                              errorMessage.style.display = 'none';
                              submitButton.style.display = 'block';
                          }
                      });
                  });
                </script>

 

スクリーンショット 2023-12-28 20.57.36.pngスクリーンショット 2023-12-28 20.57.29.png

Freelance Solution Engineer | 新垣
JavaScript Liquid Theme, React Remix App
投稿は参考になりましたか?「いいね!」でお教えください。
解決しない場合、個別に対応も可能ですのでプロフィールからお気軽にメッセージください
mottu-yurufuwa
Shopify Partner
12 0 1

新垣さま

ご回答、テストコードありがとうございます!

 

こちらの内容でうまく動作できました。

ご協力感謝いたします。

Jizo_Inagaki
Shopify Partner
1184 425 720

使用テーマ名やformタグの詳細に関する記載がないため推測になりますが、おそらくformタグにnovalidate属性が設定されているからだと思いますのでソースとテーマ内を確認ください。

 

推測が間違っている場合は申し訳ありません。

Jizo_Inagaki | フリーランスのwebデザイナー
- テーマのカスタム承れます。
- 記載した回答で解決できましたらベストソリューションの承認をお願いします。
- DMや指名による対応はご依頼として有料でのみ承ります。