0

複数選択リストボックスの JS 検証関数を作成しようとしています。

4 つの複数選択リストボックスがあり、ユーザーが少なくとも 1 つのリストボックス値から選択したかどうかを確認する必要があります。つまり、4 つのリストボックスのうち、ユーザーは少なくとも 1 つのリストボックス (任意の数の値) から選択する必要があります。

これは私が書いている関数です。

function validate(form)
{
    if ((document.getElementById("A").value=='') || (document.getElementById("B").value=='') || (document.getElementById("C").value=='') || (document.getElementById("D").value=='')) 
    {                                           
        if (0 < message.length) { message += "\n"; }
        message += "You must select atleast one of the listbox items ";

    }
}

問題が OR 条件にあることはわかっています。これらのリストボックスのそれぞれから 1 つの値が選択されていない限り、フォームを保存することはできません。

しかし、4 つのリストボックスのうち少なくとも 1 つ(任意の数の項目) を選択する必要があることを確認する必要があります。

これどうやってするの?

4

5 に答える 5

1

それを行うためのはるかに簡単な方法があります:

element = document.getElementById("myid");
selected_index = element.selectedIndex;

リストボックスに選択された要素がない場合、selected_indexは-1を返し ます。これは、リスト ボックス内のアイテム インデックスが0 から (n) まで変化することがわかっているためです。 後は君しだい

于 2015-01-25T07:49:05.750 に答える
1

AND 条件を使用するように変更する必要があり、それが適切な Sad Path アプローチになります。

if (document.getElementById("A").value == '' && 
    document.getElementById("B").value == '' && 
    document.getElementById("C").value == '' && 
    document.getElementById("D").value == '') {

    //then they didn't select AT LEAST ONE item
 }
 else {       
    //they did pick at least one
 }

編集:

次のようにして、ハッピー パス アプローチを使用できます。

 if (document.getElementById("A").value !='' || 
     document.getElementById("B").value !='' || 
     document.getElementById("C").value !='' || 
     document.getElementById("D").value !='') {

     //then they did select AT LEAST ONE item
  }
  else {       
     //they didn't pick at least one
  }
于 2012-11-07T02:38:27.677 に答える
0

選択されたオプションに value 属性がない場合、select 要素の値は IE では "" になる可能性があることに注意してください。select 要素のselectedIndexプロパティを確認することをお勧めします。

また、selected 属性を持つオプションがない場合、デフォルトで最初のオプションを選択するブラウザーと選択しないブラウザーがあるため、selectedIndexはユーザー入力なしで 0 または -1 になる可能性があります。堅牢な戦略は、常に 1 つのオプション (通常は最初のオプション) をデフォルトの選択オプションとして設定することです。

デフォルトが常に最初のオプションであり、すべての select 要素に ID 属性がある場合は、次のことができます。

function checkSelects(ids) {
  var i = ids.length;
  while (i--) {
    if (document.getElementById(ids[i]).selectedIndex) {
      return true;
    }
  }
  return false;
}

select要素に名前がある場合(フォームで成功する必要がある)、次のこともできることに注意してください。

function checkSelects(form, names) {
  var i = names.length;
  while (i--) {
    if (form[names[i].selectedIndex) {
      return true;
    }
  }
  return false;
}
于 2012-11-07T03:25:46.983 に答える
0

検証の続き... データベース内で一意に設定されたテキスト フィールドがあります。データベースの値と比較してフィールドが一意であることを確認するJava関数を作成しました。

これで、サーブレットで検証が正常に機能し、ユーザーに新しい画面が表示されます。

Java スクリプトの場合に UI 検証を行うのと同じように、Java 関数を使用してアラートをポップアップ表示する方法はありますか?

JS は UI 検証専用だと思いますが、データベースの値と比較して検証する方法があるかどうかを確認したいですか?

于 2012-11-07T03:15:11.033 に答える
0

演算子を使用する必要があります&&。つまり、4 つすべてが一緒に選択されていない場合は、メッセージを表示する必要があります。

||条件付きでは、動作が異なります。つまり、ボックスのいずれかが選択されていない場合にメッセージを表示するように設定します

||false|| true|| false|| false ->> true および について&&は、覚えておいてください。false && true && false && false ->> false

あなたの場合、たとえば、1 つの選択ボックスが選択されfalse|| true|| false|| false ->> trueているifとします。代わりに、すべての選択ボックスが選択されていない場合、つまりtrue && true && true && true --> true.

于 2012-11-07T02:32:07.277 に答える