2011-08-12 21 views
1

中不起作用,希望您可以提供帮助。我用一组单选按钮构建了一个带有窗体的页面,我想为每个窗体的onClick分配一个函数,以改变样式并突出显示选定了哪个无线电。这已经在使用直接分配的onClick事件的旧版本的代码中工作,但在更新它时,我需要将它们更改为使用Event系统在运行时分配的功能。我使用的原型1.6.0.1和下面的代码工作正常在FF,而不是IE:使用Prototype Event.Observe分配功能在IE(7)

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!

========编辑=========

与大纪元一些帮助,我发现这很复杂的功能在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')))}); 
     }) 
    } 
}, 

仍然不知道为什么这应该工作,我以前的代码不会。

回答

0

这适用于IE7,所以你有一个具体的错误?

my fiddle

+0

感谢您的回复。你的小提琴适用于我的IE7,但是当我把代码放入我的页面时,它不会。我没有收到任何错误消息。 我在循环中放置了一个警告,以确保它正在通过那个好,它是。 – ThatITBloke

+0

我很高兴它的工作原理,随时接受答案和投票:) – epoch

+0

我会接受你的答案,但在它自己的问题没有什么不同,它只是当我引用封闭的标签ID,然后下标所附输入的ID是否正常工作。我不认为我找到的解决方案是正确的,我仍然乐于接受更好的建议。 – ThatITBloke