jQuery |如何从select html元素中获取所选项目

时间:2013-03-08 13:19:39

标签: javascript jquery html dom

我在页面中设置了一个选择控件,如下所示:

<select multiple="multiple" name="name[]" id="ListId">
    <optgroup label="Group 1">
        <optgroup label="Group 1.1">
            <option selected="selected" value="1">One</option>
            <option value="2">Two</option>
            <option selected="selected" value="3">Three</option>
        </optgroup>
        <optgroup label="Group 1.2">
            <option value="1">One</option>
            <option value="2">Two</option>
            <option selected="selected" value="3">Three</option>
        </optgroup>
    </optgroup>
    <optgroup label="Group 2">
        <optgroup label="Group 2.1">
            <option value="1">One</option>
            <option selected="selected" value="2">Two</option>
            <optionvalue="3">Three</option>
        </optgroup>
    </optgroup>
</select>

在我加载页面时使用jQuery,我尝试通过以下代码获取所选项目:

if($('#ListId').length > 0)
{
    var selected = [];

    $('#ListId option[selected="selected"]').each(
        function(i)
        {
            var val = $(this).val();
            var txt = $(this).text();

            selected[val] =   txt;
        }
    );
}

然后我修改上面的代码以获取所选项目,如果用户进行了以下新选择:

if($('#ListId').length > 0)
{
    var selected = [];

    $('#ListId option[selected="selected"]').each(
        function(i)
        {
            var val = $(this).val();
            var txt = $(this).text();

            selected[val] =   txt;
        }
    );

    $('#ListId').change(
        function()
        {
            selected = [];

            $('#ListId option[selected="selected"]').each(
                function(i)
                {
                    var val = $(this).val();
                    var txt = $(this).text();

                    selected[val] =   txt;
                }
            );
        }
    );
}

但问题是仍然继续阅读预览“选定”项目。

您还可以访问此处的小提琴进行实时测试:http://jsfiddle.net/Qem7n/

关于如何解决这个问题的任何想法?

5 个答案:

答案 0 :(得分:7)

更改

$('#ListId option[selected="selected"]')

$('#ListId option:selected')

因为:[selected="selected"]不是直播选择器。

示例:http://jsfiddle.net/9YrY8/

答案 1 :(得分:1)

http://jsfiddle.net/jxQuU/52/

function put(sel,i) {
    sel[i.value]=$(i).text();
}
function change() {
    var sel = [];
    $('#ListId option:selected').each(function (k,i){put(sel,i);});
    alert(sel[1]);
}
$('#ListId').on('change',change);
change();

答案 2 :(得分:1)

试试这个:

$('#ListId').change(function(){
  var selected = $('#ListId').val()
  var str = '';
  for (var i=0;i<selected.length;i++){
    if (i>0) str += ', ';
      str += selected[i];
    }
  alert(str);
});

或者这个:

$('#ListId').change(function(){
    var $selected = $('#ListId option:selected');
    var i=0;
    var str = '';
    $selected.each(function(){
    if (i>0) str+= ', ';
    str += $(this).val() + " : " + $(this).text()+ " ";
    ++i;
  });
  alert(str);
});

或者如果您想将所选项目放入数组中,请使用以下命令:

$('#ListId').change(function(){
  var arr = [];
  var $selected = $('#ListId option:selected');
  //var i=0;
  //var str = '';
  $selected.each(function(){
     //if (i>0) str+= ', ';
     //str += $(this).val() + " : " + $(this).text()+ " ";
     arr[$(this).val()+$(this).parent().prop('label')] = $(this).text();
     //++i;
  });
  console.log(arr);
});

您应该考虑到选项具有相同的值,并且使用选项值作为数组的索引将导致数组上具有相同索引值的其他值被更改而不会附加到数组中。

答案 3 :(得分:1)

有一个单行解决方案,只需使用此

$('#formid').find('select[name="selectname"]').val()

它应该有用,它对我有用!

答案 4 :(得分:1)

和托马斯说的一样,你也可以使用

$('option:selected', '#ListId')

第二个参数代表搜索范围