0

名前空間を使用してDOMをキャッシュしようとしていますが、呼び出すとjQueryオブジェクトの代わりに「未定義」になります

  <form id="create_profile">  

      <input type="text" name="name"/>
      <input type="text" name="email" />
      <input type="text" name="password" />
      <input type="text" name="passwordconfirm" />

      <span onclick="profile.create()">valider</span>

 </form>

J:

 var profile = {

  create: function(){

   alert(profileFields.test); // show done!
   alert(profileFields.create_form.attr('id')); // show undefined instead of create_profil

  }


}

var profileFields = {

        test: "done!",  
        create_form: $("#create_profile"),
        $email: $("input[name='name']", this.create_form),
        $password: $("input[name='pass']", this.create_form),
        $passwordconfirm: $("input[name='passconfirm']", this.create_form),
        $name: $("input[name='email']", this.create_form),
        $tel: $("input[name='tel']",this.create_form)  

}  
4

2 に答える 2

1

これは、その要素が存在する前にJavaScript コードが実行されていることを示しているため$("#create_profile")、空の jQuery オブジェクトを返します。attr空の jQuery オブジェクトを呼び出すと、 が返されますundefinedscriptタグが参照する要素よりも HTML の上位にある場合、要素はスクリプトの実行時に存在しません。

また

  1. タグscriptを HTML の最後、終了タグの直前</body>、または

  2. jQuery を使用readyして、「DOM の準備が整う」までコードの実行を保留します。

scriptタグの場所を制御しない限り、#1 が優先されます。もっと:

于 2013-10-26T13:18:28.677 に答える
0

おそらく、DOM の準備が整うまで待たなかったのでしょう。

コードを次のようにラップします。

$(function () {
    //your code
});
于 2013-10-26T13:19:59.133 に答える