javascript - 使其成为全部的100%

标签 javascript jquery arrays

我有3个下拉框,其中有10到100的值。我希望用户从所有下拉框中选择累积值100。 这意味着,如果我从第一个下拉框中选择 20,那么接下来的 2 个下拉列表应保留总共选择 100 的选项

到目前为止我所做的在这里:CHECK IT HERE (JS FIDDLE)

HTML

<select id="foreign" class="me">
    <option value="">Foreign Policy</option>
    <option value="10">10%</option>
    <option value="20">20%</option>
    <option value="30">30%</option>
    <option value="40">40%</option>
    <option value="50">50%</option>
    <option value="60">60%</option>
    <option value="70">70%</option>
    <option value="80">80%</option>
    <option value="90">90%</option>
    <option value="100">100%</option>
</select>
<select id="economy" class="me">
    <option value="">Economy Policy</option>
    <option value="10">10%</option>
    <option value="20">20%</option>
    <option value="30">30%</option>
    <option value="40">40%</option>
    <option value="50">50%</option>
    <option value="60">60%</option>
    <option value="70">70%</option>
    <option value="80">80%</option>
    <option value="90">90%</option>
    <option value="100">100%</option>
</select>
<select id="social" class="me">
    <option value="">Social Policy</option>
    <option value="10">10%</option>
    <option value="20">20%</option>
    <option value="30">30%</option>
    <option value="40">40%</option>
    <option value="50">50%</option>
    <option value="60">60%</option>
    <option value="70">70%</option>
    <option value="80">80%</option>
    <option value="90">90%</option>
    <option value="100">100%</option>
</select>
<br />

<span id="message"></span>

JavaScript

/*var total = new Array();
$('#foreign option').each(function() {
    total.push($(this).val());
});

console.log(total);*/

var total = 100;
var ids = ['foreign', 'social', 'economy'];
var current_selected;

$('.me').change(function() {
    current_selected = $(this).attr('id');
    var socval = $('#' + current_selected + ' option:selected').val();
    total = total - socval;

    if ($.inArray($(this).attr('id'), ids) > -1) {
        ids.splice($.inArray($(this).attr('id'), ids), 1);

    }

    for (var i = 0; i < ids.length; i++) {

        $('#' + ids[i] + ' option').each(function() {

            if ($(this).val() >= total) {

                    $(this).attr('disabled', true);

            } else {
                $(this).attr('disabled', false);
            }

        });

    }


    if (total <= 0) {
        total = 100;
    }
    console.log(total);

    ids.push(current_selected);

});

它几乎可以工作,但有一些小错误。

更新 我想我解决了。

SOLVED FIDDLE

谢谢谁帮忙。

问候

最佳答案

改变:

if ($(this).val() >= 总计) {

if ($(this).val() > 总计) {

解决最多只能选择90%的问题

Working sample

更新

关于更改值,我可能会采取前瞻性方法并重置前向选择的值。像这样的东西:

var selectIds = ['first', 'second', 'third']

$('select').change(function(){
var currentIndex = $.inArray($(this).attr('id'), selectIds);

for(var i = currentIndex + 1; i < selectIds.length; i++)
{
    $('#' + selectIds[i]).val("0");
}

});

这基本上会重置链中比当前使用的选择框更靠前的选择项的值。

Working example

在执行禁用操作时,您还需要向前看。您应该只禁用当前选择链下游的选择列表中的项目。第一个选择列表应该始终能够选择任何值,并且以下选择基于该值进行过滤。这与上述方法非常吻合。

关于javascript - 使其成为全部的100%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10648374/

相关文章:

javascript - 图像淡入淡出,间隔困惑

javascript - 使用 Angular.js 高级过滤数据

javascript - 如何在 JavaScript 中创建一个空的二维数组?下面是我想要创建的示例

javascript - 安全错误 : The operation is insecure in canvas. 到数据 URL

jquery - 如何将两个 jQuery 事件处理程序连接在一起

C多个文件,打印数组的段错误

arrays - 在 PowerShell 中选择数组的所有对象的一个​​属性的值

javascript - 除了所选的 ng-repeat 元素外,如何降低屏幕上其他所有内容的不透明度?

javascript - ng-options 减慢数据渲染速度或在下拉列表中单击数据渲染时数据量较少

javascript - 我可以将跨站点 <img/> 标记的数据作为 blob 获取吗?