多选元素 - onchange

Posted

技术标签:

【中文标题】多选元素 - onchange【英文标题】:multiple select element - onchange 【发布时间】:2011-04-05 12:20:07 【问题描述】:

我有一个允许多选的选择元素。当用户更改所选内容时,我想在页面的另一部分(在 div 或其他内容中)显示所选值。

这样做的唯一方法是遍历“选项”并检查“选定”是否为真?这不是可取的,因为每个“onchange”事件都需要遍历整个 select 元素。

这是一个演示我目前如何做的小提琴,但我希望也许有比每次“更改”都迭代所有选项更好的方法:multiple select elment onchange fiddle

【问题讨论】:

【参考方案1】:

.val() 在多选时返回一个数组。

以下面的 sn-p 为例:

$(function() 
    $('#fruits').change(function(e) 
        var selected = $(e.target).val();
        console.dir(selected);
    ); 
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select multiple="true" id="fruits">
    <option value="apple">Apple</option>
    <option value="banana">Banana</option>
    <option value="mango">Mango</option>
    <option value="grape">Grape</option>
    <option value="watermelon">watermelon</option>
</select>

【讨论】:

【参考方案2】:

在你的小提琴中,我只是使用了.val()。这会返回一个数组

JSFiddle Link

$(function() 
    $('#fruits').change(function() 
        console.log($(this).val());
    ); 
);

【讨论】:

【参考方案3】:

如果你可以使用 jQuery,它可能就像这样简单:

$('select').change(function() alert($(this).val()))

【讨论】:

【参考方案4】:

您可以使用模糊而不是更改,以便只处理一次选择,而不是每次选择。 http://jsfiddle.net/2mSUS/3/

【讨论】:

这不合适,正如@codecraig 所说的“因为用户对所选内容进行了更改”【参考方案5】:

$(function() 
    $('#fruits').change(function(e) 
        var selected = $(e.target).val();
        console.dir(selected);
    ); 
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select multiple="true" id="fruits">
    <option value="apple">Apple</option>
    <option value="banana">Banana</option>
    <option value="mango">Mango</option>
    <option value="grape">Grape</option>
    <option value="watermelon">watermelon</option>
</select>

【讨论】:

【参考方案6】:

您可以改用:selected Selector of jQuery,但我相信在底层,jQuery 会在 selected = true 上执行循环。

【讨论】:

【参考方案7】:
element.addEventListener('click', function()alert(this.value))

这是一个 JS 的解决方案,你可以很容易地将它移植到 jQuery。这个想法是为选择中的每个选项添加一个点击监听器。由于addEventListener,这在 IE8 及更低版本中不起作用,但有一些方法可以解决这个问题。

我认为这是一个更好的方法,然后必须在列表中重申。但是,您必须为每个选项附加一个侦听器。

【讨论】:

【参考方案8】:

这行得通:

var MyControl = document.getElementById('Control_ID');
var newValue = MyControl[MyControl.selectedIndex].value;

当然,Control_ID是选择控件的ID。

【讨论】:

这并没有回答如何处理多个选定值的问题。【参考方案9】:

我正在提交表单。我的模板助手看起来像这样:

 'submit #update': function(event) 
    event.preventDefault();
    var obj_opts = event.target.tags.selectedOptions; //returns htmlCollection
    var array_opts = Object.values(obj_opts);  //convert to array
    var stray = array_opts.map((o)=> o.text ); //to filter by: text, value or selected
    //stray is now ["Test", "Milk Free"] for example, depending on the selection
    //...do stuff...

您可以对“onchange”使用类似的模式

【讨论】:

以上是关于多选元素 - onchange的主要内容,如果未能解决你的问题,请参考以下文章

多选输入:一个jquery函数中的radio元素

jQuery插件通过直观的多选、搜索等功能将选择元素带入21世纪。

input 内容改变的触发事件

input 内容改变的触发事件

选中多选框时改变相对应的包裹复选框的元素样式

JQuery 当点击input后,单选多选的选中状态