2013-11-15 93 views
1

我想创建一个简单的数学练习js脚本。如何禁用选择中的错误选项取决于选定的选项?

例如: 总数是给定的(= 10),并且有四个选择数字从0到10. 如果我选择一个数字,我应该禁用错误的选项。我的意思是,所选选项的总和不能再10

我试过这样大:click here

$(document).on("change", "select.number", function(){ 
    var sum = 10; 
    var number = $(this).children("option:selected").val(); 
    var sum_number = 0; 

    $("select.number option:selected").each(function(){ 
     sum_number = parseInt($(this).val(),10) + parseInt(sum_number,10); 
    });  

    $("select.number option").attr("disabled", false); 

    if(sum_number>0){ 
     var act_person = act_max_person = 0; 
     $("select.number").each(function(){ 
      $(this).children("option:not(:first)").each(function(){ // first is 0 
       if(parseInt($(this).val(),10) + parseInt(sum_number,10) > sum) $(this).attr("disabled", true); 
      }); 
     }); 
    } 
}); 

但它是从完美的改变远......

+0

您可以获取select元素的值使用'$(“select”).val()',你不必手动找到子选项:selected。 –

回答

0

尝试

$(document).on("change", "select.number", function() { 
    var sum = 10; 
    var number = $(this).children("option:selected").val(); 

    var sum_number = 0; 
    $("select.number option:selected").each(function() { 
     sum_number += parseInt($(this).val(), 10); 
    }); 

    $('select.number option').prop('disabled', false); 
    if (sum_number > 0) { 
     var diff = sum - sum_number; 
     $('select.number').each(function() { 
      var idx = parseInt($(this).val(), 10) + diff + 1; 
      $(this).find('option').slice(idx).prop('disabled', true) 
     }) 
    } 
}); 

演示:Fiddle

+0

绝对完美!我刚刚完成了我的早餐和哇..感谢您的快速答复。 – user527584