【问题标题】:Button is being disabled due to hidden select elements由于隐藏的选择元素,按钮被禁用
【发布时间】:2016-12-23 00:41:39
【问题描述】:

我有一个包含三个选择选项的表单:

  • 适合
  • 颜色
  • 尺寸

默认情况下,“适合”下拉菜单和“颜色”下拉菜单处于活动状态,并选择了默认值(例如,常规适合和蓝色)。

共有三种不同的“尺寸”下拉菜单,但根据从“适合”下拉菜单中选择的内容,在任何时候只有一个可见。

如果选项 value="none",则该按钮被禁用。

问题

仅当所有三个“尺寸”下拉菜单都被更改以使其值不是“无”时,按钮才会变为活动状态(这是通过为常规选择初始尺寸,然后从“适合”下拉菜单中选择小和长来完成的)。理想情况下,我只希望按钮考虑处于活动状态的“尺寸”下拉菜单。

更新

@nagappan 下面提供的工作 jsFiddle 解决方案,非常感谢。

https://jsfiddle.net/dodgers76/c0dvdwbz/

var currentSelectedVals = {'selector-fit':'','selector-color':'','selector-sizes':''};
var disableComboVals = [
{'selector-fit':'','selector-color':'','selector-sizes':'none'},
{'selector-fit':'petite','selector-color':'','selector-sizes':'10'},
{'selector-fit':'petite','selector-color':'','selector-sizes':'20'},
{'selector-fit':'petite','selector-color':'','selector-sizes':'22'},
{'selector-fit':'petite','selector-color':'','selector-sizes':'24'},
{'selector-fit':'long','selector-color':'','selector-sizes':'22'},
{'selector-fit':'long','selector-color':'','selector-sizes':'24'}
];
function checkDisableCombo() {
return $.grep(disableComboVals, function(vals){
  cnt = 0;
  $.each(vals, function(key,val) {
     console.log('comparing key val '+key+val);
     if (val === '' || val === currentSelectedVals[key]) {
         console.log('>>matched values');
         cnt = cnt + 1;
     }
  });
  if (cnt===3) {
     return true;
  }
  return false;
});
};
$(function(){
var sizeVal = 'none';


  $("select.selector-fit").on("change", function(){
    //remove active
    $("select.selector-sizes.active").removeClass("active");
    //check if select class exists. If it does then show it
    var subList = $("select.selector-sizes."+$(this).val());
    if (subList.length){
      //class exists. Show it by adding active class to it
      subList.addClass("active");
      subList.val(sizeVal);
    }
  });

  $('.selector-sizes').on('change', function() {
    sizeVal = $(this).val();
  });
});

$(function() {
  $('.selector').on('change', function() {
    var $sels = $('option.selector-sizes:selected[value="none"]');
    var isSizeSelector = jQuery.inArray( "selector-sizes",this.classList);
    currentSelectedVals[this.classList[1]] = this.value;
    console.log(currentSelectedVals);
    var result = checkDisableCombo();
    console.log(result);
    if ( result.length > 0) {
        console.log('disabled false');
        $("#Testing").attr("disabled", true);
    } else {
        $("#Testing").attr("disabled", false);
    }
  }).change();
});

【问题讨论】:

  • 您无法通过这种方式获取对象:$('.selector option:selected[value="none"]') 选择器错误。

标签: javascript jquery html css


【解决方案1】:

如果我们想通过组合下拉选择的值来禁用按钮。我们可以有一个全局变量来跟踪三个下拉列表中当前选择的值。只有我们可以拥有一系列禁用组合。因此,每当用户选择一个值时,我们都会使用禁用组合进行交叉检查,如果匹配,我们可以禁用该按钮。验证组合可以如下完成。更新了 jsfiddle 链接。 JS FIDDLE UPDATED

function checkDisableCombo() {
return $.grep(disableComboVals, function(vals){
  cnt = 0;
  $.each(vals, function(key,val) {
     console.log('comparing key val '+key+val);
     if (val === '' || val === currentSelectedVals[key]) {
         console.log('>>matched values');
         cnt = cnt + 1;
     }
  });
  if (cnt===3) {
     return true;
  }
  return false;
});

【讨论】:

  • 谢谢@nagappan,这太棒了。不过,仍有某些组合会禁用该按钮。例如,从初始加载;选择尺码 = 10,选择合身 = 娇小,选择尺码 = 18,选择合身 = 常规。如果选择了 18 号的常规款,则该按钮将被禁用。如果我从一开始选择尺码 = 6,然后选择合身 = 娇小,也会发生同样的情况。有什么想法可能有冲突吗?
  • 如果您选择尺寸(控制台禁用 false),则按钮变为活动状态,但如果用户随后决定选择不同的“适合”或“颜色”,则按钮变为非活动状态(控制台 -1 )。
  • 修改了禁用按钮组合的代码,仅当 size 为 none 时,即使其他字段发生更改,它仍将保持禁用状态。另外从理解来看,常规和 18 个选择的组合也应该禁用,也就是添加。如果您希望添加未来的组合,则声明了可以在更新的 js fiddle 中使用的数组。jsfiddle.net/nagappan08/gtohfLqs/4
  • 感谢@nagappan,这个版本完美运行!数组的使用允许我创建任何组合,包括颜色。再次感谢。
猜你喜欢
  • 2018-07-19
  • 2021-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多