2011-12-14 10 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

+0

"ajax"という言葉が何であるかを完全に理解しているかどうかは分かりませんが、基本的にjQuery/JavaScriptを使用してフォームを検証します。何か問題がなければjQueryの ".post"関数を使用してPHP関数それを私のデータベースに挿入します。このページには、セキュリティが考慮されているように管理者を認証することも含まれています。最終的には、これは私がこれらのことを学ぶプロジェクトであり、私の方法論の欠陥を学ぶことに感謝します。 – MisterWeary

+0

これは一般ユーザーがアクセスできないと聞いてうれしいです。 AJAXは$ .postと$ .getがするものです。私の主な関心事は、一般的なログインページでユーザーのリスト全体を自由に使用できるようにすることでした。恐ろしいでしょう。また、JavaScriptでこのロジックを持つことは世界の終わりではありませんが、誰もがJavaScriptをオンにすることは想定できないため、この同じロジックがPHPで重複していることを確認する必要があります。 – loganfsmyth

答えて

3

選択のノードを他の要素と同様にトラバースすることができます。

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

+1。 – Blender

+0

パーフェクト!私はもっ​​と簡単な方法があったことを知っていた...ありがとう! – MisterWeary

+0

これの補遺として、このマッチを行うときに大文字小文字を無視する方法はありますか? – MisterWeary

0

あなたはこの試みることができる:@Johnが指摘したように、あなたは(彼をupvote、ない私)セレクタを試みることができる

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(); 
} 

を:

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

アイデアをお寄せいただきありがとうございます。特に、私はvalを空白にして、一度に焦点を当てることはできませんでした...私はjQueryについて学ぶべきことがたくさんあります:-) – MisterWeary

0

が早く読み違え、ここで更新されますコード:

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

+0

私はこれらの小さな微調整ジョンの応答から必要でしたが、明確化のおかげで。 – MisterWeary

関連する問題