2017-04-07 50 views
0

我在頁面中有兩種相同的類。這些形式與相同的元素完全相同。提交其中的一個,我嘗試訪問裏面的元素。這裏是什麼形式的樣子:此查找標籤的表單不起作用

<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'); 

}); 

此代碼工作的投入,而不是標籤,未發現。

編輯:

對不起這裏的代碼實際上的樣子。該查找是在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