2011-12-14 159 views
0

我創建了一些JavaScript來檢查用戶名是否已列在我的表單上的「選擇」框的選項中。它完美的工作,但我相當肯定,更好地利用jQuery必須有一個更好的方式。我嘗試過通過jQuery API,Google和StackOverflow進行搜索,並且似乎沒有找到任何指導。如果任何人都可以給我一些指點,將不勝感激。使用jQuery匹配選擇選項

這是我目前使用的工作代碼:

// CHECK IF THE USERNAME ALREADY EXISTS 
var found  = false; 
var users  = document.admin_form.user_list.options; 
var num_users = users.length; 
if (num_users != 0) { 
    var name_in_list; 
    var i   = 0; 
    var name_chosen = $("[name=user_name]").val().toLowerCase(); 
    while ((i < num_users) && !found) { 
     name_in_list = users[i].text.toLowerCase(); 
     if (name_chosen == name_in_list) { 
     found = true; 
     } 
     i++; 
    } 
} 
if (found) { 
    $("#user_err").text("That USERNAME already exists, try again"); 
    $("[name=user_name]").val(""); 
    $("[name=user_name]").focus(); 
} 

提前感謝!

+0

從安全的角度來看,這個想法是可怕的,所以你知道。您實質上是向所有查看您網站的用戶提供了所有用戶名單。這使得對密碼執行暴力破解攻擊變得非常微不足道。請考慮使用ajax來實現此功能。 – loganfsmyth 2011-12-14 02:07:34

+0

我不確定我完全理解「ajax」這個詞是指什麼,我基本上使用jQuery/JavaScript來驗證表單,當事情沒有問題時,我使用jQuery的「.post」函數將它發送到PHP函數插入到我的數據庫。此頁面還涉及驗證管理員進入該頁面以考慮安全性。最後,這是一個讓我瞭解這些事情的項目,我很欣賞我的方法學中的學習缺陷。 – MisterWeary 2011-12-14 02:26:23

+0

我很高興聽到這是一般用戶至少無法訪問的。 AJAX是$ .post和$ .get做的。我主要擔心的是,您可以自由地將您的整個用戶列表提供給一般的登錄頁面,這會很糟糕。另外,雖然JavaScript中的這種邏輯不是世界末日,但您也應該確定這種相同的邏輯在PHP中是重複的,因爲您不能假定每個人都會打開javascript。 – loganfsmyth 2011-12-14 02:41:25

回答

3

與其他元素一樣,您可以遍歷select的節點。

if($('select option[value="some value"]').length>0) return true; 
0

你可以試試這個:

var users = $('#user_list option').map(function() { return this.value; }).get(); 

if ($.inArray($("[name=user_name]").val().toLowerCase(), users)) { 
    $("#user_err").text("That USERNAME already exists, try again"); 
    $("[name=user_name]").val('').focus(); 
} 

由於@John指出的那樣,你可以嘗試選擇(給予好評他,不是我):

if ($('#user_list option[value="' + $("[name=user_name]").val().toLowerCase() + '"]').length > 0){ 
    $("#user_err").text("That USERNAME already exists, try again"); 
    $("[name=user_name]").val('').focus(); 
} 
0

誤讀早些時候,這裏被更新代碼:

if($('#user_list option[value="' + name_chosen + '"]').length) return true;