Have your say in Community Polls: What was/is your greatest motivation to start your own business?

Shopify 2.0 product form is not working on dawn theme

Solved

Shopify 2.0 product form is not working on dawn theme

AvidBrio
Shopify Partner
296 17 29

I have try this form on the collection list item but this was not working 

 

 

    {% form 'product', product, id: product_form_id, class: 'form', novalidate: 'novalidate',  data-type: 'add-to-cart-form' %}  
<!-- form content --> 
<input type="text" name="quantity" min="1" value="1">

<input type="text" name="properties[Monogram]">  
<input type="submit" value="Add to cart">
{{ form | payment_button }}
{% endform %}

 

 

Error 

 

Something went wrong.

What happened?
Parameter Missing or Invalid: Required parameter missing or invalid: items
What can I do?

 


after click goes to the  

 

myshopify.com/cart/add

 

If you find our comment helpful, hit the like button and accept it as a solution.
Want us to implement custom changes in your store? Contact us
Email me directly - jim@avidbrio.com
Accepted Solutions (2)
IttantaTech
Shopify Partner
525 55 103

This is an accepted solution.

Hello , @AvidBrio 

I have checked this and found that right now the quantity box is outside the <form></form>

You have to put it inside the form .

So , basically you have to put this code inside the form:-

<quantity-input class="quantity">
<button class="quantity__button no-js-hidden" name="minus" type="button">
<span class="visually-hidden">Decrease quantity for Rustic Jeans</span>
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" role="presentation" class="icon icon-minus" fill="none" viewBox="0 0 10 2">
<path fill-rule="evenodd" clip-rule="evenodd" d="M.5 1C.5.7.7.5 1 .5h8a.5.5 0 110 1H1A.5.5 0 01.5 1z" fill="currentColor">
</path></svg>

</button>
<input class="quantity__input" type="number" name="quantity" id="Quantity-4869160796242" min="1" value="1" form="product-form-4869160796242">
<button class="quantity__button no-js-hidden" name="plus" type="button">
<span class="visually-hidden">Increase quantity for Rustic Jeans</span>
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" role="presentation" class="icon icon-plus" fill="none" viewBox="0 0 10 10">
<path fill-rule="evenodd" clip-rule="evenodd" d="M1 4.51a.5.5 0 000 1h3.5l.01 3.5a.5.5 0 001-.01V5.5l3.5-.01a.5.5 0 00-.01-1H5.5L5.49.99a.5.5 0 00-1 .01v3.5l-3.5.01H1z" fill="currentColor">
</path></svg>

</button>
</quantity-input>

Thanks,
Ittanta Technologies Pvt. Ltd. | Shopify Expert
If reply is helpful, please Like and Accept Solution.
To hire us, contact us at info@ittanta.com

View solution in original post

AvidBrio
Shopify Partner
296 17 29

This is an accepted solution.

@IttantaTech   thanks for the issue tracked 

here is full code snippets   I moved the  quantity-input inside the form tag please check this

 

{{ 'section-main-product.css' | asset_url | stylesheet_tag }}

<script src="{{ 'product-form.js' | asset_url }}" defer="defer"></script>

 {%- assign product_form_id__ = 'product-form-'| append: section.id -%}
 {%- assign product_form_id_ = 'product-form-'| append: product.id -%}

 
<div class="product_form_btn">


    {%- unless product.has_only_default_variant -%}
    {%- if  settings.card_picker_type == 'button' -%}
    <variant-radios class="no-js-hidden" data-section="{{ section.id }}" data-url="{{ product.url }}" {{ block.shopify_attributes }}>
      {%- for option in product.options_with_values -%}
          <fieldset class="js product-form__input">
            <legend class="form__label">{{ option.name }}</legend>
            {%- for value in option.values -%}
              <input type="radio" id="{{ section.id }}-{{ option.name }}-{{ forloop.index0 }}"
                    name="{{ option.name }}"
                    value="{{ value | escape }}"
                    form="product-form-{{ section.id }}"
                    {% if option.selected_value == value %}checked{% endif %}
              >
              <label for="{{ section.id }}-{{ option.name }}-{{ forloop.index0 }}">
                {{ value }}
              </label>
            {%- endfor -%}
          </fieldset>
      {%- endfor -%}
      <script type="application/json">
        {{ product.variants | json }}
      </script>
    </variant-radios>
    {%- else -%}
    <variant-selects class="no-js-hidden" data-section="{{ section.id }}" data-url="{{ product.url }}" {{ block.shopify_attributes }}>
      {%- for option in product.options_with_values -%}
        <div class="product-form__input product-form__input--dropdown">
          <label class="form__label" for="Option-{{ section.id }}-{{ forloop.index0 }}">
            {{ option.name }}
          </label>
          <div class="select">
            <select id="Option-{{ section.id }}-{{ forloop.index0 }}"
              class="select__select"
              name="options[{{ option.name | escape }}]"
              form="product-form-{{ section.id }}"
            >
              {%- for value in option.values -%}
                <option value="{{ value | escape }}" {% if option.selected_value == value %}selected="selected"{% endif %}>
                  {{ value }}
                </option>
              {%- endfor -%}
            </select>
            {% render 'icon-caret' %}
          </div>
        </div>
      {%- endfor -%}

      <script type="application/json">
        {{ product.variants | json }}
      </script>
    </variant-selects>

    {%- endif -%}
    {%- endunless -%}

    <noscript class="product-form__noscript-wrapper-{{ section.id }}">
    <div class="product-form__input{% if product.has_only_default_variant %} hidden{% endif %}">
      <label class="form__label" for="Variants-{{ section.id }}">{{ 'products.product.product_variants' | t }}</label>
      <div class="select">
        <select name="id" id="Variants-{{ section.id }}" class="select__select" form="product-form">
          {%- for variant in product.variants -%}
            <option
              {% if variant == product.selected_or_first_available_variant %}selected="selected"{% endif %}
              {% if variant.available == false %}disabled{% endif %}
              value="{{ variant.id }}"
            >
              {{ variant.title }}
              {%- if variant.available == false %} - {{ 'products.product.sold_out' | t }}{% endif %}
              - {{ variant.price | money | strip_html }}
            </option>
          {%- endfor -%}
        </select>
        {% render 'icon-caret' %}
      </div>
    </div>
    </noscript>

<div {{ block.shopify_attributes }}>
  {%- if product != blank -%}
    <product-form class="product-form">
      {%- form 'product', product, id: product_form_id, class: 'form', novalidate: 'novalidate', data-type: 'add-to-cart-form' -%}
        <input type="hidden" name="id" value="{{ product.selected_or_first_available_variant.id }}">
       
        <div class="product-form__buttons">
          <div class="product-form__input product-form__quantity" >
            <label class="form__label" for="Quantity-{{ product.id }}">
              {{ 'products.product.quantity.label' | t }}
            </label>
      
            <quantity-input class="quantity">
              <button class="quantity__button no-js-hidden" name="minus" type="button">
                <span class="visually-hidden">{{ 'products.product.quantity.decrease' | t: product: product.title | escape }}</span>
                {% render 'icon-minus' %}
              </button>
              <input class="quantity__input"
                  type="number"
                  name="quantity"
                  id="Quantity-{{ product.id }}"
                  min="1"
                  
                  value="1"
                  form="product-form-{{ product.id }}"
                >
              <button class="quantity__button no-js-hidden" name="plus" type="button">
                <span class="visually-hidden">{{ 'products.product.quantity.increase' | t: product: product.title | escape }}</span>
                {% render 'icon-plus' %}
              </button>
            </quantity-input>
      {%- comment -%}
            <input type="number" id="Quantity" name="quantity" value="5" min="5">
      {%- endcomment -%}
             
          </div>
          <button
            type="submit"
            name="add"
            class="product-form__submit button button--full-width {% if block.settings.show_dynamic_checkout and product.selling_plan_groups == empty %}button--secondary{% else %}button--primary{% endif %}"
          {% if product.selected_or_first_available_variant.available == false %}disabled{% endif %}
          >
              {%- if product.selected_or_first_available_variant.available -%}
                {{ 'products.product.add_to_cart' | t }}
              {%- else -%}
                {{ 'products.product.sold_out' | t }}
              {%- endif -%}
          </button>
          {%- if block.settings.show_dynamic_checkout -%}
            {{ form | payment_button }}
          {%- endif -%}
        </div>
      {%- endform -%}

  

    </product-form>
  {%- else -%}
    <div class="product-form">
      <div class="product-form__buttons form">
        <button
          type="submit"
          name="add"
          class="product-form__submit button button--full-width button--primary"
          disabled
        >
          {{ 'products.product.sold_out' | t }}
        </button>
      </div>
    </div>
  {%- endif -%}
</div>
</div>

 

still the correct input not adding to the cart

 

AvidBrio_0-1633069489185.png

 

 

add to cart button adding only one qty at one click per the time.

If you find our comment helpful, hit the like button and accept it as a solution.
Want us to implement custom changes in your store? Contact us
Email me directly - jim@avidbrio.com

View solution in original post

Replies 5 (5)

IttantaTech
Shopify Partner
525 55 103

Hello , @AvidBrio 

Can you please provide your store URL ? So that i can check this in detail

Thanks,
Ittanta Technologies Pvt. Ltd. | Shopify Expert
If reply is helpful, please Like and Accept Solution.
To hire us, contact us at info@ittanta.com
AvidBrio
Shopify Partner
296 17 29

@IttantaTech   thanks for the reply 


Here is store preview links https://uvubpxxd9q9veklm-15143478.shopifypreview.com/collections/mens-jeans
password : 1234.

See the attached screenshot for the output 

AvidBrio_0-1633067420342.png

 

If you find our comment helpful, hit the like button and accept it as a solution.
Want us to implement custom changes in your store? Contact us
Email me directly - jim@avidbrio.com
IttantaTech
Shopify Partner
525 55 103

This is an accepted solution.

Hello , @AvidBrio 

I have checked this and found that right now the quantity box is outside the <form></form>

You have to put it inside the form .

So , basically you have to put this code inside the form:-

<quantity-input class="quantity">
<button class="quantity__button no-js-hidden" name="minus" type="button">
<span class="visually-hidden">Decrease quantity for Rustic Jeans</span>
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" role="presentation" class="icon icon-minus" fill="none" viewBox="0 0 10 2">
<path fill-rule="evenodd" clip-rule="evenodd" d="M.5 1C.5.7.7.5 1 .5h8a.5.5 0 110 1H1A.5.5 0 01.5 1z" fill="currentColor">
</path></svg>

</button>
<input class="quantity__input" type="number" name="quantity" id="Quantity-4869160796242" min="1" value="1" form="product-form-4869160796242">
<button class="quantity__button no-js-hidden" name="plus" type="button">
<span class="visually-hidden">Increase quantity for Rustic Jeans</span>
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" role="presentation" class="icon icon-plus" fill="none" viewBox="0 0 10 10">
<path fill-rule="evenodd" clip-rule="evenodd" d="M1 4.51a.5.5 0 000 1h3.5l.01 3.5a.5.5 0 001-.01V5.5l3.5-.01a.5.5 0 00-.01-1H5.5L5.49.99a.5.5 0 00-1 .01v3.5l-3.5.01H1z" fill="currentColor">
</path></svg>

</button>
</quantity-input>

Thanks,
Ittanta Technologies Pvt. Ltd. | Shopify Expert
If reply is helpful, please Like and Accept Solution.
To hire us, contact us at info@ittanta.com
AvidBrio
Shopify Partner
296 17 29

This is an accepted solution.

@IttantaTech   thanks for the issue tracked 

here is full code snippets   I moved the  quantity-input inside the form tag please check this

 

{{ 'section-main-product.css' | asset_url | stylesheet_tag }}

<script src="{{ 'product-form.js' | asset_url }}" defer="defer"></script>

 {%- assign product_form_id__ = 'product-form-'| append: section.id -%}
 {%- assign product_form_id_ = 'product-form-'| append: product.id -%}

 
<div class="product_form_btn">


    {%- unless product.has_only_default_variant -%}
    {%- if  settings.card_picker_type == 'button' -%}
    <variant-radios class="no-js-hidden" data-section="{{ section.id }}" data-url="{{ product.url }}" {{ block.shopify_attributes }}>
      {%- for option in product.options_with_values -%}
          <fieldset class="js product-form__input">
            <legend class="form__label">{{ option.name }}</legend>
            {%- for value in option.values -%}
              <input type="radio" id="{{ section.id }}-{{ option.name }}-{{ forloop.index0 }}"
                    name="{{ option.name }}"
                    value="{{ value | escape }}"
                    form="product-form-{{ section.id }}"
                    {% if option.selected_value == value %}checked{% endif %}
              >
              <label for="{{ section.id }}-{{ option.name }}-{{ forloop.index0 }}">
                {{ value }}
              </label>
            {%- endfor -%}
          </fieldset>
      {%- endfor -%}
      <script type="application/json">
        {{ product.variants | json }}
      </script>
    </variant-radios>
    {%- else -%}
    <variant-selects class="no-js-hidden" data-section="{{ section.id }}" data-url="{{ product.url }}" {{ block.shopify_attributes }}>
      {%- for option in product.options_with_values -%}
        <div class="product-form__input product-form__input--dropdown">
          <label class="form__label" for="Option-{{ section.id }}-{{ forloop.index0 }}">
            {{ option.name }}
          </label>
          <div class="select">
            <select id="Option-{{ section.id }}-{{ forloop.index0 }}"
              class="select__select"
              name="options[{{ option.name | escape }}]"
              form="product-form-{{ section.id }}"
            >
              {%- for value in option.values -%}
                <option value="{{ value | escape }}" {% if option.selected_value == value %}selected="selected"{% endif %}>
                  {{ value }}
                </option>
              {%- endfor -%}
            </select>
            {% render 'icon-caret' %}
          </div>
        </div>
      {%- endfor -%}

      <script type="application/json">
        {{ product.variants | json }}
      </script>
    </variant-selects>

    {%- endif -%}
    {%- endunless -%}

    <noscript class="product-form__noscript-wrapper-{{ section.id }}">
    <div class="product-form__input{% if product.has_only_default_variant %} hidden{% endif %}">
      <label class="form__label" for="Variants-{{ section.id }}">{{ 'products.product.product_variants' | t }}</label>
      <div class="select">
        <select name="id" id="Variants-{{ section.id }}" class="select__select" form="product-form">
          {%- for variant in product.variants -%}
            <option
              {% if variant == product.selected_or_first_available_variant %}selected="selected"{% endif %}
              {% if variant.available == false %}disabled{% endif %}
              value="{{ variant.id }}"
            >
              {{ variant.title }}
              {%- if variant.available == false %} - {{ 'products.product.sold_out' | t }}{% endif %}
              - {{ variant.price | money | strip_html }}
            </option>
          {%- endfor -%}
        </select>
        {% render 'icon-caret' %}
      </div>
    </div>
    </noscript>

<div {{ block.shopify_attributes }}>
  {%- if product != blank -%}
    <product-form class="product-form">
      {%- form 'product', product, id: product_form_id, class: 'form', novalidate: 'novalidate', data-type: 'add-to-cart-form' -%}
        <input type="hidden" name="id" value="{{ product.selected_or_first_available_variant.id }}">
       
        <div class="product-form__buttons">
          <div class="product-form__input product-form__quantity" >
            <label class="form__label" for="Quantity-{{ product.id }}">
              {{ 'products.product.quantity.label' | t }}
            </label>
      
            <quantity-input class="quantity">
              <button class="quantity__button no-js-hidden" name="minus" type="button">
                <span class="visually-hidden">{{ 'products.product.quantity.decrease' | t: product: product.title | escape }}</span>
                {% render 'icon-minus' %}
              </button>
              <input class="quantity__input"
                  type="number"
                  name="quantity"
                  id="Quantity-{{ product.id }}"
                  min="1"
                  
                  value="1"
                  form="product-form-{{ product.id }}"
                >
              <button class="quantity__button no-js-hidden" name="plus" type="button">
                <span class="visually-hidden">{{ 'products.product.quantity.increase' | t: product: product.title | escape }}</span>
                {% render 'icon-plus' %}
              </button>
            </quantity-input>
      {%- comment -%}
            <input type="number" id="Quantity" name="quantity" value="5" min="5">
      {%- endcomment -%}
             
          </div>
          <button
            type="submit"
            name="add"
            class="product-form__submit button button--full-width {% if block.settings.show_dynamic_checkout and product.selling_plan_groups == empty %}button--secondary{% else %}button--primary{% endif %}"
          {% if product.selected_or_first_available_variant.available == false %}disabled{% endif %}
          >
              {%- if product.selected_or_first_available_variant.available -%}
                {{ 'products.product.add_to_cart' | t }}
              {%- else -%}
                {{ 'products.product.sold_out' | t }}
              {%- endif -%}
          </button>
          {%- if block.settings.show_dynamic_checkout -%}
            {{ form | payment_button }}
          {%- endif -%}
        </div>
      {%- endform -%}

  

    </product-form>
  {%- else -%}
    <div class="product-form">
      <div class="product-form__buttons form">
        <button
          type="submit"
          name="add"
          class="product-form__submit button button--full-width button--primary"
          disabled
        >
          {{ 'products.product.sold_out' | t }}
        </button>
      </div>
    </div>
  {%- endif -%}
</div>
</div>

 

still the correct input not adding to the cart

 

AvidBrio_0-1633069489185.png

 

 

add to cart button adding only one qty at one click per the time.

If you find our comment helpful, hit the like button and accept it as a solution.
Want us to implement custom changes in your store? Contact us
Email me directly - jim@avidbrio.com
AvidBrio
Shopify Partner
296 17 29

@IttantaTech  thanks a lot for the custom code 

  

            <div class="product-form__input product-form__quantity" {{ block.shopify_attributes }}>
              <label class="form__label" for="Quantity-{{ section.id }}">
                {{ 'products.product.quantity.label' | t }}
              </label>

              <quantity-input class="quantity 123">
                <button class="quantity__button no-js-hidden" name="minus" type="button">
                  <span class="visually-hidden">{{ 'products.product.quantity.decrease' | t: product: product.title | escape }}</span>
                  {% render 'icon-minus' %}
                </button>
                <input class="quantity__input uniq_input"
                    type="number"
                    name="quantity"
                    id="Quantity-{{ section.id }}"
                    min="1"
                    value="1"
                    form="product-form-{{ section.id }}"
                  >
                <button class="quantity__button no-js-hidden" name="plus" type="button">
                  <span class="visually-hidden">{{ 'products.product.quantity.increase' | t: product: product.title | escape }}</span>
                  {% render 'icon-plus' %}
                </button>
              </quantity-input>
            </div>  
              <div {{ block.shopify_attributes }} class="add_to_cart">
              <product-form class="product-form">
                {%- form 'product', product, id: product_form_id, class: 'form', novalidate: 'novalidate', data-type: 'add-to-cart-form' -%}
                  <input type="hidden" name="id" value="{{ product.selected_or_first_available_variant.id }}">
                  <input type="hidden" name="quantity" class="hidden_qty" value="1">
                  <div class="product-form__buttons">
                    <button
                      type="submit"
                      name="add"
                      class="product-form__submit button button--full-width {% if block.settings.show_dynamic_checkout and product.selling_plan_groups == empty %}button--secondary{% else %}button--primary{% endif %}"
                    {% if product.selected_or_first_available_variant.available == false %}disabled{% endif %}
                    >
                        {%- if product.selected_or_first_available_variant.available -%}
                          {{ 'products.product.add_to_cart' | t }}
                        {%- else -%}
                          {{ 'products.product.sold_out' | t }}
                        {%- endif -%}
                    </button>
                    {%- if block.settings.show_dynamic_checkout -%}
                      {{ form | payment_button }}
                    {%- endif -%}
                  </div>
                {%- endform -%}
              </product-form>

              {{ 'component-pickup-availability.css' | asset_url | stylesheet_tag }}

              {%- assign pick_up_availabilities = product.selected_or_first_available_variant.store_availabilities | where: 'pick_up_enabled', true -%}

              <pickup-availability class="product__pickup-availabilities no-js-hidden"
                {% if product.selected_or_first_available_variant.available and pick_up_availabilities.size > 0 %} available{% endif %}
                data-base-url="{{ shop.url }}{{ routes.root_url }}"
                data-variant-id="{{ product.selected_or_first_available_variant.id }}"
                data-has-only-default-variant="{{ product.has_only_default_variant }}"
              >
                <template>
                  <pickup-availability-preview class="pickup-availability-preview">
                    {% render 'icon-unavailable' %}
                    <div class="pickup-availability-info">
                      <p class="caption-large">{{ 'products.product.pickup_availability.unavailable' | t }}</p>
                      <button class="pickup-availability-button link link--text underlined-link">{{ 'products.product.pickup_availability.refresh' | t }}</button>
                    </div>
                  </pickup-availability-preview>
                </template>
              </pickup-availability>
            </div>
  
  {%- else -%}
    <div class="product-form">
      <div class="product-form__buttons form">
        <button
          type="submit"
          name="add"
          class="product-form__submit button button--full-width button--primary"
          disabled
        >
          {{ 'products.product.sold_out' | t }}
        </button>
      </div>
    </div>
  {%- endif -%}
</div>
</div>

<script>
  $(document).ready(function(){
    $(".uniq_input").on("change",function(){
       $(this).parent().parent().next().find(".hidden_qty").val($(this).val());
    });
  });
</script>

 

If you find our comment helpful, hit the like button and accept it as a solution.
Want us to implement custom changes in your store? Contact us
Email me directly - jim@avidbrio.com