2011-08-12 10 views
1

できれば助けてください。私はラジオボタンのグループを使ってその上にフォームを持つページを構築しました。スタイルを変更し、どのラジオが選択されているかを強調する機能をonClickに割り当てたいと思います。これは、onClickイベントを直接割り当てた古いバージョンのコードで動作していましたが、更新中にイベントシステムを使用して実行時に割り当てられた関数に変更する必要があります。私はプロトタイプ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!

======== EDIT =========

エポックからいくつかの助けを借りて、私はこのかなり精巧な機能は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上で動作しますが、私のページにコードを入れてもそれはありません。私は全くエラーメッセージを受け取っていません。 私はループ内にアラートを入れて、それがOKを通過していることを確認しました。 – ThatITBloke

+0

私はそれが動作してうれしいです、答えを受け入れると自由に感じてください:) – epoch

+0

私はあなたの答えを受け入れるだろうが、それは私の問題には何の違いもなかった、それは自分自身を囲んでいるラベルIDを参照してからsubscripted同梱された入力のIDが機能しました。私が見つけた解決策は正しいとは思いません。私はまだ良い解決策を提案しています。 – ThatITBloke

関連する問題