9.3.3 隐藏表单字段
和很多产品订购表单上一样,本教程的表单包含了单独的字段来收集账单信息和配送信息。在很多情况下,这些信息完全相同,因此,如果是这样的话,没必要让访问者把这两个字段都填上。我们经常会在这样的表单上看到一个“Same as billing”复选框,表示两组字段的信息是相同的。然而,如果在不需要配送信息字段的时候完全隐藏它们,岂不是更有用吗(更别说改变其颜色)?使用JavaScript,可以做到这一点。
1.在文本编辑器中打开文件form.html。
我们将扩展在本教程的前两个部分中编写的代码。首先,为带有标签“Same as billing.”的复选框的click事件添加一个函数。该复选框的HTML如下所示:
<input type="checkbox"name="hideShip"id="hideShip">
2.把如下的代码添加到在9.3.2节的步骤4所添加的代码之后,但在脚本末尾(最后一行代码});//end ready())之前。
$('#hideShip').click(function(){
});//end click
由于该复选框有一个ID为hideShip,上面的代码选择它并给click事件添加一个函数。在这个例子中,当复选框选中的时候,我们希望整组字段都消失,而不只是隐藏单个的字段。为了使得这更容易做到,组成配送信息字段的HTML包围在ID为shipping的一个<div>标签中:要隐藏这个字段,只需要隐藏该<div>标签。
然而,我们仍然只想在复选框选中的时候隐藏这些字段。如果某人再次单击复选框而未选中它,<div>标签及其表单字段都应该返回。因此,第一步是搞清楚复选框是否选中。
3.添加如下粗体所示代码:
$('#hideShip').click(function(){
if($(this).attr('checked')){
}
});//end click
一条简单的条件语句(参见3.1.1节)使得测试复选框的状态并且隐藏或显示表单字段变得很容易。$(this)指向被单击的对象,在这个例子中就是复选框。元素的checked属性使我们能够知道复选框是否选中了。如果选中了,那么这个属性返回true;否则,它返回false。要完成这段代码,只需要添加隐藏和显示表单字段的步骤。
4.把如下粗体所示的代码(第16~18行)添加到脚本中。完成后的脚本如下所示:
1<script>
2$(document).ready(function(){
3$(':text:first').focus();
4$('#paypal').click(function(){
5$('#creditCard input').attr('disabled',true)8
6.css('backgroundColor',’#CCC');
7$('#creditCard label').css('color',’#BBB');
8});//end click
9$('#visa,#mastercard').click(function(){
10$('#creditCard input').attr('disabled',false)8
11.css('backgroundColor',’');
12$('#creditCard label').css('color',’');
13});//end click
14$('#hideShip').click(function(){
15 if($(this).attr('checked')){
16$('#shipping').slideUp('fast');
17}else{
18$('#shipping').slideDown('fast');
19}
20});//end click
21});//end ready()
22</script>
$('#shipping')引用了带有表单字段的<div>标签,而slideUp()和slideDown()函数(参见6.1.3节的介绍)通过将<div>标签向上滑出视线或者向下滑入视线来隐藏和显示它。你可以尝试一些其他的jQuery效果,例如fadeIn()和fadeOut(),或者,甚至可以使用animate()函数(参见本书6.3节)来创建自己的定制动画。
这个教程的完整版本complete_form.html位于chapter09目录下。如果你的版本不能够工作,将自己的代码和完成的教程比较一下,或者参考1.6节介绍的排错步骤。