首先,我已经剥离了所有其他脚本(验证和模板)的小提琴:
http://jsfiddle.net/Jacek_FH/EwpXp/5/
接下来,我修补了重置功能以使用 niceforms 选择:
http://jsfiddle.net/Jacek_FH/EwpXp/7/
Niceforms 是如何工作的?
这个想法很简单:由于普通输入字段(包括单选按钮、复选框、文本区域等)只能在很小程度上设置样式,因此必须将它们隐藏起来,并用类似的工作、新的、完全可定制的结构替换它们的视觉外观。从理论上讲,这听起来并不复杂。但从理论到实践还有很长的路要走。
如何处理选择
<div class="NFSelect" style="width: 80px; left: 140px; top: 77px; z-index: 999;">
<img class="NFSelectLeft" src="img/0.png">
<div class="NFSelectRight">- Select -</div>
<div class="NFSelectTarget" style="display: none;">
<ul class="NFSelectOptions">
<li><a href="javascript:;" class="NFOptionActive">- Select -</a></li>
<li><a href="javascript:;">Active</a></li>
<li><a href="javascript:;">Inactive</a></li>
</ul>
</div>
</div>
<select id="status" class="NFhidden" name="status" size="1">
<option selected="selected" value="">- Select -</option>
<option value="Active">Active</option>
<option value="Inactive">Inactive</option>
</select>
触发表单重置时,所有 html 输入都将重置,但 Niceforms 使用 div 重复选择。因此,我已将选项中的值复制到 Niceforms div 中(重置后)。我的代码:
$('#reset').click(function(){
// reset form
$(':input','#templatesForm')
.not(':submit, :button, :hidden, :reset')
.val('');
// update select
$('select').each(function(){
var option = $('option:selected', this).html();
var niceselect = $(this).parents('dd').find('.NFSelectRight');
niceselect.html(option);
$(this).parents('dd')
.find('.NFSelectTarget a')
.removeClass('NFOptionActive')
.filter(':first').addClass('NFOptionActive');
});
});
编辑
经过考虑,还有其他方法 - 您可以重新加载 Niceforms。但它是有代价的——表格闪烁
$('#reset').click(function(){
// reset form
$(':input','#templatesForm')
.not(':submit, :button, :hidden, :reset')
.val('');
// reload niceforms
NFDo('stop');
NFDo('start');
});