HTML:
<form name="the_form" onsubmit="investmentPreApply(); return false;" id="the_form">
<fieldset class="investment-apply-box1">
<label for="cautious" id="cautiousLabel" class="isa-option">
<input type="radio" id="cautious" name="radios" value="cautious" />Cautious Portfolio
</label>
<label for="balanced" id="balancedLabel" class="isa-option">
<input type="radio" id="balanced" name="radios" value="balanced" />Balanced Portfolio
</label>
<label for="adventurous" id="adventurousLabel" class="isa-option">
<input type="radio" id="adventurous" name="radios" value="adventurous" />Adventurous Portfolio
</label>
<label for="mixed" id="mixedLabel" class="isa-option">
<input type="radio" id="mixed" name="radios" value="mixed" />Invest in a bit of each
</label>
<div class="isa-body-text-hidden" id="error-text">Please choose your ISA above</div>
</fieldset>
<div class="investment-apply-box2">
<!--Lots more HTML here-->
</div>
</form>
JS:
findInvestmentPreApply: function() {
if ($('investment') && $('the_form')) {
var formItems = $$('.isa-option input');
formItems.each(function(s,i){
Event.observe(s, 'click', function() {highlightRadioChoice(s.id)});
})
}
},
我尝试过添加.bind(this)和.bindAsEventListener的各种组合,但没有成功。
原始代码看起来像这样:
<label for="cautious" id="cautiousLabel" class="isa-option">
<input type="radio" id="cautious" name="radios" value="cautious" onclick="highlightRadioChoice('cautious');" />Cautious Portfolio
</label>
并且调用的highlightRadioChoice函数未更改。
如果有帮助,则highlightRadioChoice函数与事件代码位于不同的js文件中,事件代码本身位于页面加载运行的函数的js文件中,以实现渐进增强方法。我不禁想到,如果我将highlightRadioChoice函数移动到加载运行的文件中,它将正常工作(即调用this.highlightRadioChoice(...)),但这意味着要改变其他页面的整个负载不想在这个阶段。
请帮助我StackOverflow!
====== EDIT ======
在Epoch的帮助下,我发现这个相当复杂的功能在IE和FF中都有效:
findInvestmentPreApply: function() {
if ($('investment') && $('the_form')) {
var formItems = $$('.isa-option');
formItems.each(function(s){
s.observe('click', function() {highlightRadioChoice(s.id.substring(0,s.id.indexOf('Label')))});
})
}
},
仍然不确定为什么这应该有效,而我以前的代码不会。