当前位置:嗨网首页>书籍在线阅读

11-讨论

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

10.2.4 讨论

在上述的解决方案中,使用了 input:text 选择器,避免禁用复选框。

使用 .trigger('change') 会立刻执行 .change() 事件。该事件开始时会检查复选框状态,以防它默认选中。而且,事件方法保护Firefox和其他在页面刷新时保留单选按钮和复选框状态的浏览器。

当禁用JavaScript时会发生什么情况?你应该在CSS中默认隐藏复选框。然后使用JavaScript为覆盖前一个CSS规则的双亲元素添加一个类名。在下面的示例代码中,添加了一个附加的 <div> 来包围复选框和标签,便于隐藏它们:

<style type="text/css" title="text/css">
 #sameAsShippingWrapper { display:none; }
 .jsEnabled #sameAsShippingWrapper { display:block }
</style>
...
//当HTML DOM就绪时
$(document).ready(function(){
   $('form').addClass('jsEnabled');
});
...
<form>
 ...
 <div id="sameAsShippingWrapper">
   <label for="sameAsShipping">Same as Shipping</label>
   <input name="sameAsShipping" id="sameAsShipping" type="checkbox" ... />
 </div>
 ....
</form>

作为用CSS隐藏复选框然后用JavaScript显示它的替代方案,还可以用JavaScript将复选框添加到DOM中。我喜欢保持HTML、CSS和JavaScript的独立,但是有时候这是更好的解决方案:

var html_label = '<label for="sameAsShipping">Same as Shipping</label>';
var html_input = '<input name="sameAsShipping" id="sameAsShipping" type="checkbox"
value="sameAsShipping" />';
$( html_label + html_input ).prependTo('#billingInfo").change( ... ).trigger( ... );