0

これは新しいトピックではなく、以前にも尋ねられたことがあることを認識しています。私はさまざまな回答を読みましたが、Javascript は上達していますが、ほとんどの回答に混乱しています。

カテゴリと会社の両方を評価する評価をユーザーに求めています。ラジオ ボタンの両方のセットに回答がマークされていることを Javascript で検証し、可能であれば、マークされていないものに応じて個別のアラートを出すようにしたいと考えています。

私のコード(それらがラップされているテーブルを省略)

<form action="blah.php" method="post" onsubmit="return validaterating()"
name="ratings">

<input type="radio" name="categoryrate" value="5">
<input type="radio" name="categoryrate" value="4">
<input type="radio" name="categoryrate" value="3">
<input type="radio" name="categoryrate" value="2">
<input type="radio" name="categoryrate" value="1">

<input type="radio" name="companyrate" value="5">
<input type="radio" name="companyrate" value="4">
<input type="radio" name="companyrate" value="3">
<input type="radio" name="companyrate" value="2">
<input type="radio" name="companyrate" value="1">

</form>

Javascript:

function validaterating() {

var rate1 = document.forms.ratings.categoryrate;
var rate2 = document.forms.ratings.companyrate;

function validaterating() {
for (var i=0; i < rate1.length; i++) {
if (rate1[i].checked)
return true;
}
alert("Please rate the category.");
return false;
}

これで、私が持っている最初の評価を検証するためにこれが機能することがわかりました。これは、私にとって最も理にかなっていると思う検証設定です。ただし、検証する 2 番目の質問 (rate2) を取得できません。&& 演算子を使用して別の for ループを試しましたが、2 番目を検証しようとすると機能しなくなります。私が書いているコードを使用して、どのようにそれが可能ですか?

御時間ありがとうございます。

4

5 に答える 5

1

http://jsfiddle.net/R5M5Y/

HTML

<form onsubmit="return test();" action="blah.php" method="post" name="ratings">
category:
<input type="radio" name="categoryrate" value="5">
<input type="radio" name="categoryrate" value="4">
<input type="radio" name="categoryrate" value="3">
<input type="radio" name="categoryrate" value="2">
<input type="radio" name="categoryrate" value="1">
company:
<input type="radio" name="companyrate" value="5">
<input type="radio" name="companyrate" value="4">
<input type="radio" name="companyrate" value="3">
<input type="radio" name="companyrate" value="2">
<input type="radio" name="companyrate" value="1">
    <input type='submit' />
</form>

JavaScript

function test(){
  var category = document.getElementsByName("categoryrate");
  var check1 = 0;
  for(i=0;i<category.length;i++){
    if(category[i].checked){
      check1++;
      break;
    }
  }
  var company = document.getElementsByName("companyrate");
  var check2 = 0;
  for(i=0;i<company.length;i++){
    if(company[i].checked){
      check2++;
      break;
    }
  }
  if(check1 && check2){
  }else{
    alert("you must select ratings for both company and category");
    return false;
  }
}
于 2013-01-15T17:07:25.383 に答える
0

ラジオボタンの両方のセットを検証するために持っているJavaScriptはこれですべてですか?まず、2つの関数があり、どちらも同じ名前(検証)です。次に、ラッパー関数を閉じるために、最後に閉じ括弧を追加するのを忘れています。

あなたがすべきことは2つの変数を設定することです。両方ともブールフラグとして機能します。次に、ボタンが選択されているかどうかを判断するために、ラジオボタンの各セットをループします。その場合は、対応するフラグをtrueに設定し、そうでない場合はfalseに設定します。次に、最後に、両方のフラグがtrueに設定されているかどうかをテストします。そうでない場合は、アラートをスローします。

于 2013-01-15T16:49:04.453 に答える
0

関数検証() {

var rate1 = document.forms.ratings.categoryrate; var rate2 = document.forms.ratings.companyrate;

function validaterating() { for (var i=0; i < rate1.length; i++) { if (rate1[i].checked) return true; } alert("カテゴリを評価してください。"); false を返します。}

このコードには多数の構文エラーがあります。なぜ 2 つの検証評価関数があるのか​​わかりません。今のところ、それらを間違ってコピーし、コードが実際に機能すると仮定します。

ここでの問題は、rate1 で true を見つけた後に true を返すことです。その後 rate2 を検証するコードがあった場合、関数は既に返されているため、ヒットしません。

1 つの解決策は、2 つのブール変数 categoryChecked、companyChecked を作成し、それらを false に初期化することです。次に、各 i について document.forms.rating.categoryrate[i].checked をループし、それらのいずれかが true の場合は、categoryChecked = true を設定します。companyChecked についても同じことを行います。

次に、で終了します

return categoryChecked && companyChecked
于 2013-01-15T16:59:15.863 に答える
0

次のようなことができます。

function validaterating() {
 return validateGroup(document.getElementsByName("categoryrate")) && validateGroup(document.getElementsByName("companyrate"))
}

function validateGroup(elements) {
 for (var i = 0; i < elements.length; i++) {
  if (elements[i].checked) return true;
 }
return false;
}
于 2013-01-15T17:11:16.217 に答える