选中复选框后需要字段集

时间:2013-09-23 22:20:40

标签: jquery checkbox required

我上周刚开始学习HTML / CSS,javascript和jQuery,非常感谢一些帮助。 我创建了一个带有复选框(id #ship_to_billing)的表单,然后创建了一个包含5个文本字段的字段集(id #shipping_info)。使用JQuery我已经设置好了,如果选中该复选框,它会切换其他字段并隐藏它们。但是,我无法弄清楚如何另外需要一个或另一个,要么必须选中复选框,要么必须完成字段集中的所有文本字段。我不需要提醒。请帮忙!

先谢谢大家,苏珊

<a type="button" class="btn btn-primary" href="#product-options" data-           
toggle="modal">Buy This!</a>                                        
    <div class="modal hide fade" id="product-options">                    
        <div class="modal-header center">
             <a class="close" data-dismiss="modal">x</a>
                <h3>When, Where and How?</h3>
         </div>
            <div class="modal-body l-m"> 
            {% include 'datepicker' %}
            <p>
            <input type="hidden" name="properties[ship_to_billing]" value="" />                          
            <label for="ship_to_billing" style="max-width:335px;">
            <input id="ship_to_billing" type="checkbox" name="properties[Ship to Billing Address]" value="Yes" {% if properties.ship_to_billing %} checked="checked"{% endif %} />
            <font size=1>Check here to have items shipped to your billing address (collected during checkout). Otherwise please fill out the information below.</font>
            </label><br /> 
            </p>                        
          <div class="fieldgroup" id="shipping_info">
            <label for="shipping_name">Name of Recipient:</label>      
            <input class="input-xlarge" type="text" id="shipping_name" placeholder="Name" name="properties[Recipient]" required="required" />                                 
            <p>
            <label for="address_street">Shipping Address:</label>
            <input class="input-xlarge" type="text" id="address_street" placeholder="Street Address" name="properties[Address]" required="required" />
            <input class="input-xlarge" type="text" id="address_city" placeholder="City" name="properties[City]" required="required" />
            <input class="input-medium" type="text" id="address_province" placeholder="State" name="properties[State]" required="required" />
            <input class="input-medium" type="text" id="address_zip" placeholder="Zip Code" name="properties[Zip]" required="required" />
            </p>
          </div>
          <p>
          <label for="gift_msg">Gift Message :</label>                                
          <textarea id="gift_msg" placeholder="Please type your message" name="properties[Gift Message]" rows="4" cols="45"></textarea> 
          </p>                              
       </div>

       <div class="modal-footer">
           <div class="btn-group">
                <button href="#" class="btn" data-dismiss="modal">Cancel</button>
                <button type="submit" onclick="return validateShipping();" class="btn btn-primary" id="addtocart">Add To Cart</button>
            </div>
          </div>              
        </div>

JQUERY:

<script>
$('#ship_to_billing').change(function(){
$('#shipping_info').toggle('show');
});
</script>

2 个答案:

答案 0 :(得分:3)

客户端验证总是落后于服务器端验证的第二好,因为用户总是可以禁用Javascript或强制发布可以覆盖浏览器功能的废话,但是您的服务器不能被轻易愚弄!也就是说,你是在正确的轨道上,虽然我很想修改它...首先,你的HTML(删节):

<form method="post">
    <input id="ship_to_billing" type="checkbox" name="properties" />
    <div class="fieldgroup" id="shipping_info">
        <input type="text" id="shipping_name" name="properties[Recipient]" />
        <input type="text" id="address_street" name="properties[Address]" />
        ...
    </div>
    <input type="submit" onclick="return validateMyStuff();" value="Submit" />
</form>

接下来,您的脚本稍微强大一些:

<script src="/path/to/jquery.js"></script>
<script type="text/javascript">

    // this will run when the document's done loading...
    $(function(){
        $("#ship_to_billing").change(function(){
            // make sure of the checked state...
            // hide the fields if the checkbox is checked...
            // 'this' is the checkbox...
            if ($(this).is(":checked")) // fixed error here! ;)
                $("#shipping_info").hide();
            else
                $("#shipping_info").show();
        });
    });

    // validate the input, only if the checkbox is not checked...
    // this will be called when your submit button is clicked...
    function validateMyStuff() {
        if (!$("#ship_to_billing").is(":checked")) {
            // check to see that the other input fields have values...
            var inputs = $("#shipping_info input");
            var ready = true;
            inputs.each(function(){
                // 'this' is the current input we're validating...
                if ($(this).val() == '') {
                    ready = false;
                    return false; // exits jQuery '.each' function...
                }
            });
            if (!ready) {
                alert("You forgot to fill in something!");
                return false;
            }
        }
        return true;
    }

</script>

嗯,根据原始问题中有限的信息,这是我能给出的最佳解释。希望这可以帮助! :)

编辑1:

道歉!我在JavaScript代码的第10行遗漏了一个右括号)!我已经修复了问题,将上面的代码复制/粘贴到HTML页面似乎工作正常。请记住将jQuery脚本包含在其余脚本之上,并将脚本放在HTML的<head>...</head>部分。

答案 1 :(得分:0)

就客户端验证而言,您可以在shipping_info字段集中提供required attribute这样的所有输入

$('#shipping_info input').attr('required', true);

但是这并不能保证字段会被填充,因为用户可以绕过它。因此,无论你做什么,都必须检查服务器端。