代码之家  ›  专栏  ›  技术社区  ›  Tim Visher

如何通过javascript或jquery或…,验证所有选择框是否都具有所选选项?

  •  1
  • Tim Visher  · 技术社区  · 14 年前

    我在一个页面上有两个选择框,其中包含可变数量的选项。

    例如:

    <fieldset>
        <label for="fizzwizzle">Select a Fizzwizzle</label>
        <select name="fizzwizzle" id="fizzwizzle" size="10">
            <option>Fizzwizzle_01</option>
            <option>Fizzwizzle_02</option>
            <option>Fizzwizzle_03</option>
            <option>Fizzwizzle_04</option>
        </select>
    </fieldset>
    <fieldset>
        <label for="fizzbaggot">Select a Fizzbaggot</label>
        <select name="fizzbaggot" id="fizzbaggot" size="10">
            <option>Fizzbaggot_01</option>
        </select>
    </fieldset>
    

    我想验证这两个选择框是否都有一个选中的选项。我最初的想法是简单地使用jquery,但我似乎不知道如何做到这一点。到目前为止,我的尝试都是徒劳的,但我有以下代码,我认为应该可以使用丢失的链接。

    function verify_selectboxen_selection() {
        var allSelected = true;
    
        $('select').each(function() {
          /* if select box doesn't have a selected option */
                allSelected = false;
                break;
        });
    
        if (!allSelected) {
            alert('You must select a Job and a Disposition File.');
        }
        return allSelected;
    }
    

    看起来很简单。思想?

    4 回复  |  直到 14 年前
        1
  •  3
  •   Sampson    14 年前

    :selected

    if ($("select").length === $("option:selected").length) {
      // they match
    }
    
        2
  •  2
  •   bobince    14 年前

    multiple select selected option

    return true;

    <select name="fizzbaggot">
        <option value="" selected="selected">(Select a fizzbaggot)</option>
        <option>foo</option>
        <option>baz</option>
        <option>bar</option>
    </select>
    

    $('select').each(function() {
        if ($(this).val()!=='')
            allSelected= false;
    });
    

    $('select').each(function() {
        if (this.selectedIndex===0)
            allSelected= false;
    });
    
        3
  •  1
  •   Lachlan Roche    14 年前

    :selected selector

    var unselected = [] 
    $('select').each(function(){
        if (0 == $(this).find('option:selected').length) {
            unselected.push(this.id);
        }
    });
    
    if (unselected.length != 0) {
        // unselected contains the ids of non-selected select boxes
    }
    

    val()

    var unselected = [] 
    $('select').each(function(){
        if ('' == $(this).val()) {
            unselected.push(this.id);
        }
    });
    
    if (unselected.length != 0) {
        // unselected contains the ids of non-selected select boxes
    }
    
        4
  •  0
  •   Francisco Aquino    14 年前
     function checkSelects() {
            return $("select :selected").length == $("select").length;
        }
    
    alert(checkSelects());