创建依赖的Chechboxradio按钮 - jQuery Mobile

时间:2016-03-10 01:22:41

标签: javascript jquery jquery-mobile

我正在尝试在jQuery mobile中创建几个checkboxradio按钮组,这些按钮组取决于限制checkboxradio按钮组值。例如,如果选择了6的限制,我想只允许用户根据所有其他checkboxradio按钮组选择的值选择最多6个子节点,并禁用其他所有内容。当限制更改时,我想相应地更新UI。

每当任何checkboxradio按钮被点击时,我的更改事件处理程序中都有以下代码:

function updateUI(element) {
    var limit = parseInt($('input[name="Limit_Total"]:checked').val(), 10);

   // Children
   var childCount = parseInt($('input[name="Child_Total"]:checked').val(), 10);
   var secondChildCount = parseInt($('input[name="Second_Child_Total"]:checked').val(), 10);
   var thirdChildCount = parseInt($('input[name="Third_Child_Total"]:checked').val(), 10);
   var fourthChildCount = parseInt($('input[name="Fourth_Child_Total"]:checked').val(), 10);
   var fifthChildCount = parseInt($('input[name="Fifth_Child_Total"]:checked').val(), 10);

   // Totals
   var totalChildern = childCount + secondChildCount + thirdChildCount + fourthChildCount + fifthChildCount;


   // Enable the correct combination of children
   $('input[name*="Child_Total"]').not(element).checkboxradio('disable').checkboxradio('refresh');
       for (var i = 0; i <= 6; i++) {
          if (i <= (limit - totalChildren)) {
              $('input[id$="Child_Total_' + i + '"]').not(element).checkboxradio('enable').checkboxradio('refresh');
          } else {
              $('input[id$="Child_Total_' + i + '"]').not(element).attr('checked', false).checkboxradio('refresh');
          }
       }
    }

我基本上想模拟下图所示的行为:

enter image description here

问题是它不能完全给我我想要的行为。它取消选择除了我在组中选择的按钮以外的所有按钮。我试图找出最有效的方法,但我很难过。任何建议或帮助将不胜感激!

我已设置以下jsfiddle来演示用户界面:http://jsfiddle.net/X8swt/29/

1 个答案:

答案 0 :(得分:1)

我设法通过以下功能解决了我的问题:

$('div fieldset').each(function() { 
        // Disable all none checked inputs 
        $(this).find('input:not(:checked)').checkboxradio().checkboxradio("disable").checkboxradio("refresh");
        // Grab the selected input
        var selectedElement = $(this).find('input:checked');
        // Calculate the remaining children that can be selected
        var remaining = (limit - totalChildern);
        // Enable all inputs less than the selected input
        $.each($(selectedElement).parent().prevAll().find('input'), function() {
            $(this).checkboxradio().checkboxradio("enable").checkboxradio("refresh");
        });
        // Enable up to the remaining boxes past the selected input
        $.each($(selectedElement).parent().nextAll().slice(0,remaining).find('input'), function() {
           $(this).checkboxradio().checkboxradio("enable").checkboxradio("refresh"); 
        });
    });

请随意评论或批评我的解决方案。