3

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

<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/

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

4

5 回答 5

8

改变

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

$('#ListId option:selected')

因为:[selected="selected"]不是实时选择器。

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

于 2013-03-08T13:37:32.090 回答
2

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();
于 2013-03-08T13:30:54.483 回答
2

试试这个:

$('#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);
});

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

于 2013-03-08T13:44:59.540 回答
2

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

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

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

于 2013-09-26T18:33:37.217 回答
2

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

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

第二个参数代表搜索范围

于 2014-03-05T13:35:53.277 回答