我有一个带有选择字段的表单。根据选择,应显示可选的第二个字段(每个选项不同)以收集更多信息。我有一个我在jQuery中编写的脚本来执行此操作并将其快速转换为插件(目的是在以后将更多常用的表单相关代码添加到插件中 - 在此方面需要进行更改)。
无论如何,问题是这个代码在IE7,Firefox,Chrome,Opera等中运行良好。但是它一直导致在几台不同的计算机上安装IE8以完全冻结。它永远不会解冻,永远不会出错。鉴于缺乏任何可供调试的信息,我很困惑为什么会发生这种情况或者如何从这里进行故障排除。
HTML通常看起来像这样(剪辑)。
<!-- Controls Below -->
<li class="group-1 has-dependents">
<label for="selSource">How did you hear about us?</label>
<select id="selSource" name="selSource">
<option value="0">Select One</option>
<option class="group-referral" value="1">Referral</option>
<option class="group-conference" value="4">Conference</option>
<option class="group-other" value="7">Other</option>
</select>
</li>
<!-- Controlled Above -->
<li id="itemSource" class="group-1 dependent">
<!-- Opt 1 -->
<label for="selSourceReferral" class="group-referral">Who gave the referral?</label>
<select name="selSourceReferral" id="selSourceReferral" class="group-referral" disabled="disabled">
<option value="0">Select One</option>
<option value="101">....</option>
<option value="102">....</option>
<option value="103">....</option>
<option value="999">....</option>
</select>
<!-- Opt 2 -->
<label for="selSourceConference" class="group-conference">Which conference?</label>
<select name="selSourceConference" id="selSourceConference" class="group-conference" disabled="disabled">
<option value="0">Select One</option>
<option value="101">....</option>
<option value="102">....</option>
<option value="103">....</option>
<option value="999">....</option>
</select>
<!-- Opt 3 -->
<label for="txtSourceOther" class="group-other">Please Specify</label>
<input type="text" name="txtSourceOther" id="Text1" class="group-other" disabled="disabled" />
<input type="text" name="txtSourceSubOther" id="Text2" class="group-other" disabled="disabled" />
</li>
插件代码如下:
(function($){
/* Show associated fields based on current selection */
function show_dependents(_this, _event){
var current = $('select option[value=' + $(_this).val() + ']').attr("class");
if(current.length > 0){
var temp = $(_this).closest('label, li, div, fieldset').attr("class").split(' ');
for(var i = 0; i < temp.length; i++){
if(temp[i].search("group-") >= 0){
temp = "." + temp[i] + "." + "dependent";
$(temp).find('label, input, select, li, div, fieldset').not('.' + current).fadeOut(function(){
$(temp).find('label, input, select, li, div, fieldset').not('.' + current).hide();
});
$(temp).find('.' + current).removeAttr('disabled').fadeIn();
}
}
}
}
$.fn.rlmforms = function(options){
return this.each(function(){
$(this).bind('change.current',
function(e){
show_dependents(this, e);
}
);
$(this).trigger('change.current');
}); // this.each()
} // $.fn.rlmforms = function(options)
})(jQuery);
它被称为:
$('#selSource').rlmforms();
有什么想法吗?请注意,在加载页面时它不会冻结,而是在单击父选择字段时冻结。选项下拉,可以单击并突出显示一个选项。此时浏览器完全冻结,永不解冻。下拉列表甚至没有恢复,但是在点击突出显示的下拉列表中保持不变。