2017-04-02 4 views
0

私はJavaScriptで十分ではありません。単純に私はいくつかの入力フィールドを持つフォームを持っています。ユーザーは少なくとも1つを入力する必要があります。私はすでにこれを行うための正しいコードを見つけました。このコードは、警告メッセージを使用してエラーが発生したことをユーザーに通知します。しかし、私は同じコードを使用してこのアラートメッセージの代わりにすべての入力フィールドの境界線を赤にしたい。少なくとも入力されていないときにすべての入力フィールドの境界が赤くなる

HTML

<form id="myform" action="" method="post"> 
    <input name="destination" class="form-control" type="text" > 
    <input name="thingstodo" class="form-control" type="text"> 
    <input name="gsearch" class="form-control" type="text"> 
    <button type="submit" name="search">Search</button> 
</form> 

はJavaScript

$(function(){ 
    $("#myform").submit(function(){ 

    var valid=0; 
    $(this).find('input[type=text]').each(function(){ 
     if($(this).val() != "") valid+=1; 
    }); 

    if(valid){ 
     return true; 
    } 
    else { 
     alert("error: you must fill in at least one field"); 
     return false; 
    } 
    }); 
}); 

おかげ

+0

これは簡単な変更ですが、私は赤のすべてのフィールドを強調表示することを指摘う - UXの観点からすると、すべてのフィールドはむしろちょうど1よりも必要とされていることを示しています。私はこのUIを再考するだろう。 – Yoda

答えて

1

CSSスタイルを設定することでそれを行うことができます。これはjQuery構文で最も簡単に実行できます。

$(function(){ 
    $("#myform").submit(function(){ 

    var valid = 0; 
    $(this).find('input[type=text]').each(function(){ 
     if($(this).val() != "") { 
     valid++; 
     $(this).css("border-color", "initial"); 
     } 
     else { 
     $(this).css("border-color", "red"); 
     } 
    }); 

    if (valid > 0) { return true; } 
    else { return false; } 
    }); 
}); 
+0

このコードにはまだ問題があります。 1つの欄に記入した後でも。アクションは先に進まない – Mido

+0

申し訳ありませんが、私はあなたが "アクションは先に進まない"とは何を意味するのか分かりません。ここに私が投稿したコードの実例があります:https://jsfiddle.net/q5xub1Le/明らかに、すべてのフィールドを有効にしてサブミットすると、その例にはサーバーサイドのコードがないので何も起こりません。しかし、それは検証が空のフィールドをキャッチし、それらを赤で強調表示することを示しています。 – ADyson

+0

私は3つのフィールドに記入する必要はありません。1つのフィールドで十分です。ここでは、すべてのフィールドを埋めるまで検索ボタンを押すことができません。 – Mido

1

ので

$(function(){ 
$("#myform").submit(function(){ 

var valid=0; 
$(this).find('input[type=text]').each(function(){ 

    if($(this).val() != "") valid+=1; 
else 
$(this).style.border = "solid 1px red" 
}); 

if(valid){ 
    return true; 
} 
else { 
    return false; 
} 
}); 
}); 
のようなコードを変更します。
+1

フォーム要素を強調表示した各フィールドを強調表示するのではなく、ユーザーが指定した動作を実際に提供するわけではありません。 – Yoda

+0

これは@Yodaに当てはまります。フォーム要素全体を強調表示する代わりに、各フィールドを個別に強調表示する方法 – Mido

+0

あなたは正しいです。私はそれに応じてそれを変更しました。これを試してください – lhavCoder

0

これはいかがですか?

$(function(){ 
 
    $("#myform").submit(function(){ 
 
    var dirty = false; 
 
    $('input[type=text]').each(function(){ 
 
     if($(this).val().length){ 
 
      dirty = true; 
 
     } 
 
    }); 
 
    if(!dirty){ 
 
     $('input[type=text]').each(function(){ 
 
     $(this).css('border','1px solid red'); 
 
     }); 
 
    } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form id="myform" action="" method="post"> 
 
    <input name="destination" class="form-control" type="text" > 
 
    <input name="thingstodo" class="form-control" type="text"> 
 
    <input name="gsearch" class="form-control" type="text"> 
 
    <button type="submit" name="search">Search</button> 
 
</form>

関連する問題