2017-04-07 19 views
0

私は同じクラスの2つのフォームをページに持っています。これらのフォームは同じ要素で全く同じです。そのうちの1つを提出すると、内部の要素にアクセスしようとします。ここではフォームがどのように見えるかです:フォーム内のこの検索ラベルが機能しない

<form role="form" class="login-form" id="login-form"> 
        {% csrf_token %} 
       <div class="form-group"> 
        <div class="input-icon"> 
        <i class="icon fa fa-user"></i> 
        <input type="text" class="form-control" name="email" placeholder="Username" id="email"> 
        </div> 
       </div> 
       <div class="form-group"> 
        <div class="input-icon"> 
        <i class="icon fa fa-unlock-alt"></i> 
        <input type="password" class="form-control" placeholder="Password" name="password" id="password"> 
        </div> 
       </div> 
       <div> 
        <!--input type="checkbox" id="remember" name="rememberme" value="forever" style="float: left;"--> 
        <label style="display: none; color: red;" id="incorrect_info">Veuillez vérifier vos informations</label> 
       </div> 

       <button class="btn btn-common log-btn">Se connecter</button> 
       </form> 

今、私は要素にアクセスしようとするのjavascript:

$('.login-form').submit(function(e){ 
    e.preventDefault(); 
    // Get information 

    email = $(this).find('input[id="email"]').val(); 
    pass = $(this).find('input[id="password"]').val(); 
    $(this).find('label[id="incorrect_info"]').css('display','block'); 

}); 

このコードは見つからないラベルのための入力のために動作しますが、ではありません。

EDIT:

申し訳ありませんが、ここでは、コードがどのように見えるか、実際にあります。 findはajaxで呼び出されます。

$('.login-form').submit(function(e){ 
    e.preventDefault(); 
    // Get information 

    email = $(this).find('input[id="email"]').val(); 
    pass = $(this).find('input[id="password"]').val(); 

    $.ajax({ 
     ....... 
    }).done(function (data) { 
     if (data.success) { 
      window.location.href = data.url; 
     } 
     else { 
      $(this).find('label[id="incorrect_info"]').css('display','block'); 
     } 
    }); 

}); 
+0

https://jsfiddle.net/gtbgrmb4/ それは動作しますが、なぜ? – Oleksandr

+0

あなたのコードは、孤立して正常に動作するようです:https://jsfiddle.net/f6dgk2kw/。問題の実際の例を教えてください。また、あなたのコードは、重複した 'id'属性を使用していることを暗示しています。これは無効です。属性セレクタを使用して要素をIDで検索する方法を説明します。代わりにクラスを使用 –

+0

同じIDを使用するのではなく、同じクラスを使用しない特定の理由はありますか?参照してください:[リンク](http://stackoverflow.com/a/5611975/2271768) – Kartal

答えて

0

私はこれを理解しました。問題は、$(this)スコープがajax関数内で異なっていることです。私がやったことは、それに入る前に、それを保存し、後にそれを再利用することです:

$('.login-form').submit(function(e){ 
    e.preventDefault(); 
    // Get information 

    this_form = $(this); 

    email = $(this).find('input[id="email"]').val(); 
    pass = $(this).find('input[id="password"]').val(); 

    $.ajax({ 
     ...... 
     success : function(data, status){ 
     } 
    }).done(function (data) { 
     if (data.success) { 
      window.location.href = data.url; 
     } 
     else { 
      this_form.find('label[id="incorrect_info"]').css('display','block'); 
     } 
    }); 

}); 
+2

http://stackoverflow.com/questions/6307017/use-this-in-ajax-callback-jquery – moopet

関連する問題