2017-06-02 16 views
0

私は1つの形式で2つのラジオボタンのセットを持っています。セットごとに1つのラジオボタンをチェックしていない場合は、フォームを送信することはできません。可能であれば、JSのみ(jQueryはありません)のソリューションが欲しいです。私はここで古い質問に役立つ機能を見つけ、それを私のケースに適応しようとしましたが、明らかに失敗しました。私のミスはどこですか?JavaScriptを使用して2つのラジオボタンを1つのフォームで検証する方法はありますか?

<form> 

<input type="radio" name="date_1" id="dat-1_27-10" value="2017-10-27" <?php echo $checked1 ;?> /> 
<input type="radio" name="date_1" id="dat-1_28-10" value="2017-10-28" <?php echo $checked2 ;?> /> 
<input type="radio" name="date_1" id="dat-1_03-11" value="2017-11-03" <?php echo $checked3 ;?> /> 
<input type="radio" name="date_1" id="dat-1_04-11" value="2017-11-04" <?php echo $checked4 ;?> /> 

<input type="radio" name="date_2" id="dat-2_27-10" value="2017-10-27" <?php echo $checked5 ;?> /> 
<input type="radio" name="date_2" id="dat-2_28-10" value="2017-10-28" <?php echo $checked6 ;?> /> 
<input type="radio" name="date_2" id="dat-2_03-11" value="2017-11-03" <?php echo $checked7 ;?> /> 
<input type="radio" name="date_2" id="dat-2_04-11" value="2017-11-04" <?php echo $checked8 ;?> /> 

<input type="submit" name="send" value="send" id="submit" onclick='return validateDateOne(); return validateDateTwo();'/> 

</form> 

<script> 

function validateDateOne() { 
     if (!$("input[name='date_1']:checked").val()) { 
      alert('Please choose your favourite date'); 
      return false; 
     } 
     else {} 
} 

function validateDateTwo() { 
     if (!$("input[name='date_2']:checked").val()) { 
      alert('Please choose a second date'); 
      return false; 
     } 
     else {} 
} 

</script> 
+0

検証するための一つの機能を持っています。その関数であなたのロジックを追加してください。 – selvassn

+0

ただ、_validateDateTwo()_関数を完全に削除することによってラジオボタンのセットのうち_one_を検証しようとしています。関数自体にエラーがあるはずです。 – lioness

答えて

0

小切手を1つの機能でグループ化します。また、jQueryを使用してサブミットハンドラをアタッチすることをお勧めします。ここで

はjQueryのハンドラを提出することに取り組んでjsfiddle

<input type="submit" name="send" value="send" id="submit" /> 


$('#myform').submit(function(e){ 
     e.preventDefault(); 
     if (!$("input[name='date_1']:checked").val()) { 
      alert('Please choose your favourite date'); 
      return; 
     } 
     if (!$("input[name='date_2']:checked").val()) { 
      alert('Please choose a second date'); 
      return; 
     } 
     alert("submit") 
}); 

注意がonDomReadyハンドラに包まれています。

また、クライアント側の検証はで、NEVERは安全です。入力データを確認するには、バックエンドでもそれを検証します。

+0

セキュリティ上の問題を指摘してくれてありがとう!しかし、この場合、JSを学ぶプロジェクトとしてクライアント側のみの実現を書くように求められます。 – lioness

+0

@lionessは全く問題ありませんが、覚えておいてください;) このソリューションはクライアント側でも機能します。 – Strernd

+0

あなたのコードについては、コピーした後にID「#myform」だけを変更しましたが、動作していないようですね?代わりに、すべての通常のテキストフィールドが入力されたかどうかをチェックする私の他の関数は、もはや動作しません。 – lioness

0

唯一の機能が十分に

function validateDate() { 
 
    if (!$("input[name='date_1']:checked").length) //validate first one 
 
    { 
 
    console.log('select any one in first part'); 
 
    return false; 
 
    } 
 
    if (!$("input[name='date_2']:checked").length) //validate second one 
 
    { 
 
    console.log('select any one in second part') 
 
    return false; 
 
    } 
 

 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form onsubmit="return validateDate()"> 
 
    <!--only do with single function--> 
 

 
    <input type="radio" name="date_1" id="dat-1_27-10" value="2017-10-27" <?php echo $checked1 ;?> /> 
 
    <input type="radio" name="date_1" id="dat-1_28-10" value="2017-10-28" <?php echo $checked2 ;?> /> 
 
    <input type="radio" name="date_1" id="dat-1_03-11" value="2017-11-03" <?php echo $checked3 ;?> /> 
 
    <input type="radio" name="date_1" id="dat-1_04-11" value="2017-11-04" <?php echo $checked4 ;?> /> 
 

 
    <input type="radio" name="date_2" id="dat-2_27-10" value="2017-10-27" <?php echo $checked5 ;?> /> 
 
    <input type="radio" name="date_2" id="dat-2_28-10" value="2017-10-28" <?php echo $checked6 ;?> /> 
 
    <input type="radio" name="date_2" id="dat-2_03-11" value="2017-11-03" <?php echo $checked7 ;?> /> 
 
    <input type="radio" name="date_2" id="dat-2_04-11" value="2017-11-04" <?php echo $checked8 ;?> /> 
 

 
    <input type="submit" name="send" value="send" id="submit" /> 
 

 
</form>

1

コールで2つの機能を必要とする.NO checkedボックスの長さを検証し、代わりにbuttonクリックの形のonsubmitvalidation機能を追加して試してみてください関数validateDateTwo()がretclunステートメントを持つ関数validateDateOne()のelse条件の中でonclickで呼び出すのではなく、

純粋なJS溶液の場合、$の代わりにquerySelectorを使用しました。

function validateDateOne() { 
 
     if (!document.body.querySelector("input[name='date_1']:checked")) { 
 
      alert('Please choose your favourite date'); 
 
      return false; 
 
     } 
 
     else { 
 
     return validateDateTwo(); 
 
     } 
 
} 
 

 
function validateDateTwo() { 
 
     if (!document.body.querySelector("input[name='date_2']:checked")) { 
 
      alert('Please choose a second date'); 
 
      return false; 
 
     } 
 
     else {} 
 
}
<form> 
 

 
<input type="radio" name="date_1" id="dat-1_27-10" value="2017-10-27" />2017-10-27 
 
<input type="radio" name="date_1" id="dat-1_28-10" value="2017-10-28" />2017-10-28 
 
<input type="radio" name="date_1" id="dat-1_03-11" value="2017-10-28" />2017-10-28 
 
<input type="radio" name="date_1" id="dat-1_04-11" value="2017-11-04" />2017-11-04 
 
<br/> 
 
<input type="radio" name="date_2" id="dat-2_27-10" value="2017-10-27" />2017-10-27 
 
<input type="radio" name="date_2" id="dat-2_28-10" value="2017-10-28" />2017-10-28 
 
<input type="radio" name="date_2" id="dat-2_03-11" value="2017-11-03" />2017-10-28 
 
<input type="radio" name="date_2" id="dat-2_04-11" value="2017-11-04" />2017-11-04 
 

 
<input type="submit" name="send" value="send" id="submit" onclick='return validateDateOne();'/> 
 

 
</form>

関連する問題