2017-04-14 9 views
0

私は大きなフォームを持つWebアプリケーションをビルドしています。フォームの上部には、ユーザーが1つをクリックしてダイアログボックスを開くFIVEボタンがあります。ボタンは性別、体重、身長、髪色、目の色です。Javascriptでより効率的にチェックと画面スクロールを実行できますか?

ボタンは、このように、カテゴリの名前と疑問符を示すアウト開始:

Sex - ? 
Weight - ? 
Height - ? 
Hair - ? 
Eyes - ? 

ので、例えば、誰かが重ボタン、それらを可能にJSダイアログポップアップをクリックした場合体重を選ぶ彼らがいったん行ってダイアログを閉じると、疑問符は彼らが選んだ実際の重さを示すように変わり、次に彼らは別のボタンをクリックすることができます。

フォームの残りの部分には「標準」フィールド(標準入力フィールド)があり、Jqueryで検証を行って検証しています。これはうまくいきますが、Jqueryのバリデーションは、上で説明したボタンの設定でうまくいきませんので、以下のコードを使用して自分で検証します。

本質的には、いずれかに疑問符があるかどうかを確認し、そうであれば(ユーザーがまだ選択していないことを意味します)、「必須」メッセージを含むスパンを「表示」しますそれ以外の場合は、最初の無効なJquery Validateフォーム(常にページの下側)にスクロールするだけなので、ページの上部にスクロールします。

以下のコードは非常に非効率的です。同意しますか?もしSexがまだ疑問符を持っているならば、コードは画面に一番上にスクロールするように指示しているが、さらに4つのチェックを続ける必要があるというのは間違っているようだ。

 if ($sexdisplaytext.indexOf('?') !== -1) { 
     $('#sex-display-error').show(); 
     $('html,body').animate({scrollTop:0},0); 
     } 
     if ($weightdisplaytext.indexOf('?') !== -1) { 
     $('#weight-display-error').show(); 
     $('html,body').animate({scrollTop:0},0); 
     } 
     if ($heighthdisplaytext.indexOf('?') !== -1) { 
     $('#height-display-error').show(); 
     $('html,body').animate({scrollTop:0},0); 
     } 
     if ($hairdisplaytext.indexOf('?') !== -1) { 
     $('#hair-display-error').show(); 
     $('html,body').animate({scrollTop:0},0); 
     } 
     if ($eyedisplaytext.indexOf('?') !== -1) { 
     $('#eye-display-error').show(); 
     $('html,body').animate({scrollTop:0},0); 
     } 

私は誰かがこのコードをより効率的に書く良い方法を説明してくれることを願っています。

また、このコードの記述方法は上手くいくのか、パフォーマンス/スピード/その他の問題を引き起こすほど効率的ではないのでしょうか?

洞察力があれば幸いです。単にあなたのelems以上のループが、その後、ホードがエラーを発見した場合は先頭にスクロールし

+1

1)あなたがチェックアウトする場合があります[コードレビュー](https://codereview.stackexchange.com /)2)短絡を常に利用することができます。 'var scrollPage = checkSex || checkWeight || ... '。いずれかが 'true'を返すと、以下のものは実行されません。 –

答えて

3
if([$sexdisplaytext,$weightdisplaytext,$heighthdisplaytext,$hairdisplaytext,$eyedisplaytext].reduce(function(status,el){ 
    if (el.indexOf('?') !== -1) { 
    el.parent.show();//TODO get the error based on its relative position in dom, like 3rd child or sth 

    return true;//scroll to top 
    } 
    return status;//keep old status 
},false)) $('html,body').animate({scrollTop:0},0); 

...

+0

ユーザーが5つの「ボタン」のうち3つを忘れてしまったとしたら、このコードは1つの権利が失われた(つまり、最初に逃した)ことを通知するだけでしょうか?それから彼らが再び提出するならば、それは次のものを教えてくれるでしょう。もしそうなら、私はそれが最良のユーザーエクスペリエンスであるかどうかはわかりません。あるいは、私は誤解していますか?このコードは実際には、1つまたは4つのメッセージを一度に表示する必要がありますか? – user3304303

+1

@ user3304303そうです。あなたのニーズに合わせて編集... –

関連する問題