2016-07-06 53 views
1

我有一组复选框和一个QUERY按钮,因此用户可以检查几件事情并单击QUERY按钮进行服务调用以返回记录。如果没有选中任何复选框,如何禁用QUERY按钮?使用Dojo检测是否所有复选框都未选中,禁用按钮

下面是我写的代码。当我第一次取消选中所有这些时,QUERY按钮被禁用。但是当我再次选中一个复选框时,数组“未选中”变为空。请帮忙!

 _bindChkChangeEvent: function(){ 
 
      var unchecked = []; 
 
      on(query('.chk'), 'change', lang.hitch(this, function(event) { 
 
       if(!event.target.checked){ 
 
        if(unchecked.indexOf(event.target.id) < 0) 
 
         unchecked.push(event.target.id); 
 
       } 
 
       else{ 
 
        if(unchecked.indexOf(event.target.id) > -1) 
 
         unchecked.splice(event.target.id); 
 
       } 
 
    
 
       this._switchQueryBtn(unchecked); 
 
      })); 
 
     }, 
 

 
     _switchQueryBtn: function(unchecked){ 
 
      if(unchecked.length == 10) 
 
        html.addClass(this.btnQuery, 'disabled'); 
 
      else 
 
        html.removeClass(this.btnQuery, 'disabled'); 
 
     },

+0

工作后,我做了如下修改:unchecked.splice(event.target.id); unchecked.splice(unchecked.indexOf(event.target.id),1); –

回答

1

在下面的链接工作的例子,你可以尝试采用这种概念,你的代码(不幸的是,问题只包含部分代码视图)。

https://jsfiddle.net/zmh7bbrf/

脚本的作用:

  • 编程创建两个复选框。
  • 以编程方式创建按钮。
  • 为每个复选框添加事件处理程序onChange
  • 功能showHideButton实际上包含显示或隐藏按钮的逻辑。
  • 现在,当页面加载时,两个复选框均未选中,showHideButton运行并且按钮被禁用。
  • 当用户点击一个复选框时,重新运行功能showHideButton
  • 此时不符合条件,因为现在选中了一个复选框,因此重新启用该按钮。

该脚本可以处理任意数量的复选框,只需添加它们的引用并修改showHideButton函数中的逻辑即可。

注: 您可以使用dijit/registry找到你的小部件的引用,而不是使用dojo/query和直接查询DOM如在你原来的问题的代码。

dijit/registry

的更多信息可以在这里找到: https://dojotoolkit.org/reference-guide/1.10/dijit/registry.html


require(["dijit/form/CheckBox", "dijit/registry", "dijit/form/Button", "dojo/domReady!"], function(CheckBox, registry, Button) { 
    new CheckBox({ 
    id: "checkBox0", 
    name: "checkBox0", 
    value: "option0", 
    checked: false, 
    onChange: function(event) { 
     showHideButton(); 
    } 
    }, "checkBox0").startup(); 
    new CheckBox({ 
    id: "checkBox1", 
    name: "checkBox1", 
    value: "option1", 
    checked: false, 
    onChange: function(event) { 
     showHideButton(); 
    } 
    }, "checkBox1").startup(); 
    new Button({ 
    label: "Click me!", 
    onClick: function() {; 
    } 
    }, "button").startup(); 

    var showHideButton = function() { 
    var checkBox0 = registry.byId('checkBox0'), 
     checkBox1 = registry.byId('checkBox1'), 
     button = registry.byId('button'); 
    if (!checkBox0.checked && !checkBox1.checked) { 
     button.set('disabled', true); 
    } else { 
     button.set('disabled', false); 
    } 
    }; 
    showHideButton(); 

}); 

<input id="checkBox0" /> 
<label for="checkBox">Option 0</label> 
<br> 
<input id="checkBox1" /> 
<label for="checkBox">Option 1</label> 
<br> 
<button id="button" type="button"></button> 
+0

感谢您的回复。我看到了你的代码的想法。但就我而言,我有十几个复选框,按类查询复选框,然后通过它们循环看起来更容易。 –

+0

@AlexW我明白你的观点,或者你可以使用registry.toArray()循环思考你所有的小部件,只选择复选框检查并在那里应用你的逻辑。 – GibboK

相关问题