【问题标题】:Form submits without required checkbox being checked表单提交时未选中必填复选框
【发布时间】:2013-08-01 20:21:04
【问题描述】:

我已经用我的 bigcartel 在线商店模板玩了将近一个星期,继续编辑一个已经存在的主题以符合我的想象。

为了符合我所在国家/地区关于在线销售的法律要求,我需要包含一个复选框,表明我的客户已阅读、理解并接受我的商店的条件条款 - 总而言之 - 没有人阅读的部分完全没有:D

首先,我尝试在该部分中插入一个带有一些文本的复选框,然后

<input id="agb_check" name="agb_check" type="checkbox" required /><span id="agb_txt">SOME TEXT.</span>

然而,这并没有影响我的提交按钮,而是我的“刷新”按钮,用于计算运费,一旦你选择了一个国家。

接下来,我尝试通过向我的提交按钮添加一个 onclick 事件处理程序来阻止页面加载:

<button id="checkout-btn" class="button" onclick="validiere()" title="Checkout" type="button">Checkout</button>

并将此脚本添加到我的头部:

function validiere(){ 
    if(document.getElementById("agb_check").checked){
        document.getElementById("cart-form").submit();
    } 
    else {
        window.stop();
        document.getElementById("agb_text").style.color="red";
    }
}

好吧-那也没有用。

你们有什么建议吗?

该网站是:explore.dlld-fashion.de

基本上,当您尝试重新计算运费时出现的“需要复选框”弹出窗口将是完美的。

感谢您的宝贵时间和来自德国的问候!

丹尼兹

HTML 表单代码:

     <form id="cart-form" {% unless cart.shipping.enabled or cart.discount.enabled %}class="no_options"{% endunless %} method="post" action="/cart">
  <div id="cart_description">
    <section id="cart_items">
      <ul>
        {% for item in cart.items %}
        <li class="cart_item {% unless item.product.has_default_option %}with_option{% endunless %}" id="item-{{ item.id }}">          
          <div class="item_image"><img src="{{ item.product.image | product_image_url size:"thumb" }}" alt="Photo of {{ item.name }}"></div>          
          <dl>
            <dt><a href="{{ item.product.url }}">{{ item.product.name }}</a></dt>
            <dd class="item_price">{{ item.unit_price | money_with_sign }}{% if item.quantity > 1 %}<span class="item_quantity">(x{{ item.quantity }})</span>{% endif %}</dd>
            <dd class="quantity_input" style="display:none">{{ item | item_quantity_input }}</dd>
            {% unless item.product.has_default_option %}<dd class="item_option">{{ item.option.name }}</dd>{% endunless %}
          </dl>

          <a href="#" class="remove_item" title="Remove item from cart">Remove item</a>
        </li>
        {% endfor %}         
      </ul>
    </section>

    {% if cart.shipping.enabled or cart.discount.enabled %}
    <section id="cart_options">
      <ul>
        {% if cart.shipping.enabled %}
        {% if cart.shipping.strict %}
        <li id="shipping_option">
          <label for="country">Shipping</label>
          {{ store.country | country_select }}

          {% if cart.shipping.pending %}
            {% if cart.country %}
            <span class="no_shipping">We don't ship to {{ cart.country.name }}</span>
            {% endif %}
          {% endif %}
        </li>
        {% endif %}
        {% endif %}

        {% if cart.discount.enabled %}
        <li id="cart_discount" class="cart_item">
          {% if cart.discount.pending %}
            <label id="cart_discount_label" for="cart_discount_code">Discount</label>
            {{ cart.discount | discount_code_input }}
          {% elsif cart.discount.free_shipping %}
             <label for="cart_discount_code">Discount</label>        
            <p>{{ cart.discount.name }}</p>         
          {% else %}
            <label for="cart_discount_code">Discount</label>        
            <p>{{ cart.discount.name }}</p>
          {% endif %}
        </li>
        {% endif %}
      </ul>

      <div class="cart-update">
        <button id="update-btn-footer" class="update-btn button disabled" name="update" type="submit" title="Update your cart total"><span>Update total</span></button>
      </div>    
    </section>
    {% endif %}
  </div>

  <section id="cart_summary">
    <ul>
      <li>
        <h3>Items</h3>
        <span>{{ cart.subtotal | money_with_sign }}</span>
      </li>
      {% if cart.shipping.enabled %}
      <li id="cart-shipping-tax">
        <h3>Shipping</h3>
        {% if cart.shipping.pending %}
          {% if cart.country %}
          <span class="shipping-amount">Select another country</span>
          {% else %}
          <span class="shipping-amount">Select country</span>
          {% endif %}
        {% else %}
          <span class="shipping-amount">{{ cart.shipping.amount | money_with_sign }}</span>
        {% endif %}
      </li>
      {% else %}
      <li id="cart-shipping-tax" class="not_set">
        <h3>Shipping</h3>
        <span>Applicable fees apply</span>
      </li>        
      {% endif %}

      {% if cart.discount.enabled %}
        {% if cart.discount.pending %}

        {% elsif cart.discount.free_shipping %}
        <li>
          <h3>Discount</h3>
          <span>Free shipping!</span>
        </li>
        {% else %}
        <li>
          <h3>Discount</h3>
          <span>-{{ cart.discount.amount | money_with_sign }}</span>
        </li>
        {% endif %}
      {% endif %}
      <li id="cart_total">
        <h3>Total</h3>
        <h2>{{ cart.total | money_with_sign }}</h2>
      </li>                              
    </ul>

    <button id="checkout-btn" class="button" onclick="validiere()" title="Checkout" type="button">Checkout</button>

  <input id="agb_check" name="agb_check" type="checkbox" required /><span id="agb_txt">Hiermit erkläre ich mich mit den geltenden AGB's einverstanden.</span>


  </section>
</form>

【问题讨论】:

  • 我认为你应该 return false; 而不是 return false;
  • 您在服务器上使用什么类型的语言?您永远不应该在客户端进行验证,因为用户可以更改您的 JavaScript。您应该将数据发送到您的服务器端逻辑并检查是否已检查,布尔值应该执行,如果已检查则继续正常导航,如果没有,则向用户发送消息,如果他将无法继续不选中该框并阻止订单完成。
  • 能否提供整个表单HTML?
  • 所以整个 JS 解决方法似乎都行不通。通过单击提交按钮,似乎触发了另一个功能,将您带到结帐站点。但是修复提交按钮和复选框中所需属性之间的连接,当前触发运费的刷新按钮呢?
  • 我在原帖中贴出了代码!

标签: javascript forms validation checkbox required


【解决方案1】:

如果您将函数更改为以下内容,它应该可以工作:

function validiere(){ 
    if(document.getElementById("agb_check").checked){
        document.getElementById("cart-form").submit();
    } 
    else {
        document.getElementById("agb_text").style.color="red";
    }
    return false;
}

【讨论】:

  • 那也没用。该按钮仍会触发指向另一侧的链接。
  • 它在这里工作 jsfiddle.net/wQ99t 。也许如果从您的表单/脚本中发布更多代码,我们可以进一步调试它。
  • ive 刚刚发布了表单的 html 部分作为编辑。不幸的是,bigcartel 不允许编辑原始 javascript,这会触发一个不会被 prevent.default 代码停止的函数。我网站的网址是:explore.dlld-fashion.de
【解决方案2】:

可以从表单的提交按钮调用验证函数。如果验证失败,它应该返回 false。

【讨论】:

    【解决方案3】:

    $("#checkout-btn").click(function(event)
        {
            event.preventDefault();
        });
    

    防止默认行为(提交)

    还有,只是

    document.getElementById('theFormId').onsubmit = function() {                
                if(!validate())
                    return false;
                }   
                else{
                 return true;
                }
    } 
    

    应该可以。

    【讨论】:

    • 好的,我刚刚添加了一个非JQuery的解决方案
    • 不幸的是,它不起作用。它仍然提交表单。 :(
    • 表单有id吗?函数 validate() 是否正常返回 true,否则返回 false?
    • validate() 函数确实有效。唯一不起作用的是停止加载过程
    猜你喜欢
    • 2013-01-21
    • 2012-05-23
    • 1970-01-01
    • 2023-02-17
    • 2021-09-22
    • 2014-04-04
    • 2016-12-22
    相关资源
    最近更新 更多