我上周刚开始学习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>
答案 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);
但是这并不能保证字段会被填充,因为用户可以绕过它。因此,无论你做什么,都必须检查服务器端。