2012-04-16 5 views
0

登録フォームを改良しています。フォームを簡略化するためにjQueryを使用したいと考えています。Grailsでjqueryにドロップダウンリストの値を渡します。

サイトのユーザーは、Teachers,Donors、またはその両方のいずれかになります。 Teachersにはフィールドがあり、Donorsは不要で、その逆もあります。だから、すべての分野のフォームを詰め込み、国際的なユーザーを教授学レベルに尋ねて混乱させるのではなく、ユーザーが自分の役割を選択できるようにドロップダウンリストを実装し、固有の必須フィールドがappend()メソッド。

これは私がこれまでに構築した形である:

<g:formRemote name="register" url="[controller:'user', action:'register']" onSuccess="showFields()"> 
    <dl> 
     <dt>User name</dt> 
     <dd><g:textField name="username" value ="${user?.username }"/></dd> 

     <dt>Password</dt> 
     <dd><g:passwordField name="password" value = "${user?.password }"/></dd> 

     <dt>Repeat Password</dt> 
     <dd><g:passwordField name="passwordRepeat" value = "${user?.passwordRepeat }" /></dd> 

     <dt>Account Type</dt> 
     <dd> 
      <g:select name="role" from="${['Teacher', 'Donor', 'Both'] }"/> 
     </dd> 
    </dl> 



    <input type="submit" value="Register" /> 
</g:formRemote> 

、スクリプトが

放火犯を使用し
<script type="text/javascript"> 
    $('#role').change(function(){ 
     var user = $('#role option:selected').text(); 

     alert(user); 

     if (user == 'Teacher'){ 

     } else if (user == 'Donor'){ 

     } else { 

     } 

    }); 
</script> 

ですが、私が選択リストにid roleを持っていることを確認しましたが、この機能は起動していません。実際には、私はどのような選択をしても、それは完全に無視されます。

どうしてですか?

+0

スクリプトは$(document).readyですか? –

+0

@SimonEdström、あなたの提案は解決策でした。あなたが答えとしてそれを提出すれば、私はそれを受け入れるでしょう。 – Jason

+0

ありがとう、私は答えを投稿しました。それはあなたのための基本かもしれないが、私は他人が起こっていることを理解できるように説明しようとした... –

答えて

3

問題は、DOMがロードされる前にスクリプトが実行されることです。したがって、イベントハンドラをバインドしようとすると、その要素は存在しません。

だから、完全なDOMをロードした後に変更イベントハンドラをバインドしようとする、ドキュメント準備完了イベント内に完全な関数をラップするだけです。

$(document).ready(function(){ 
    $('#role').change(function(){ 
     var user = $('#role option:selected').text(); 

     alert(user); 

     if (user == 'Teacher'){ 

     } else if (user == 'Donor'){ 

     } else { 

     } 
    }); 
}); 

それとも単にあなたのページの一番下にスクリプトを追加することができます。お勧めしませんが、FYI ...

1

あなたは実行する必要があります。

$("[name='role']").change(function() { 

あなたは役割のname属性を持つ要素を選択している上記のコードを使用して、#nameを使用してIDプロパティで選択されています。

+0

@ジェイソンは火かき棒をチェックし、* id *が役割であると言う。 –

+0

ええ、マークアップからはそうではありません:)。私は彼がFirebugで見ているものを混乱させるかもしれないと思う:) – mattytommo

+0

問題は私が$(document).readyの中に関数を持っていなかったことだった。変更時に明示的な関数呼び出しがなかったので、呼び出されていませんでした。 – Jason

関連する問題