2014-10-17 56 views
0

我有一些输入元素,并希望包括一个复选框,如果输入元素不完整,将被禁用。但是,我无法使用onClick属性。小提琴在下面。正如你所看到的,我的目标是,如果input1和input2留空,结果复选框应该被禁用。有什么建议?javascript有条件地禁用复选框

小提琴:http://jsfiddle.net/0jozk5uL/

HTML

Input 1:<select name="input1" id="input1" initialvalue=""> 
<option class="no-op" value="">-- Please select --</option> 
<option value="1">1</option> 
<option value="2">2</option> 
<option value="3">3</option> 
</select><br> 
Input 2:<select name="input2" id="input2" initialvalue=""> 
<option class="no-op" value="">-- Please select --</option> 
<option value="1">1</option> 
<option value="2">2</option> 
<option value="3">3</option> 
</select><br> 
Result:<input type="checkbox" name="result" id="result"> 

的Javascript

var input1 = document.getElementById('input1'); 
var input2 = document.getElementById('input2'); 
var result = document.getElementById('result'); 

function(){ 
    if(input1 == "" && input2 == ""){ 
     result.disabled = true; 
    } else { 
     result.disabled = false; 
    } 

} 

回答

3

您需要检查input1.value == "",不能简单地input1 == ""

您还需要最初触发您的方法,并且每次选择列表更改值时都会运行它。

给这个函数的名称

function setCheckState(evt) { 
    if (input1.value == "" || input2.value == "") { 
     result.disabled = true; 
    } else { 
     result.disabled = false; 
    } 
} 

添加事件侦听器

input1.addEventListener('change', setCheckState); 
input2.addEventListener('change', setCheckState); 

火的方法来获得初始复选框状态集

setCheckState(); 

见我update to your fiddle

Finally,可以减少你if()语句来一个简单的任务...

function setCheckState(evt) { 
    result.disabled = input1.value == "" || input2.value == ""; 
} 

[编辑] ...感谢戴夫的基础上,问题的提出“禁用如果输入内容不完整“。我相信你是正确的使用||而不是&& ...更新这个答案,并再做一个fiddle change

+0

谢谢。我相信这是一个有益的开始,但并不能解决问题。我很欣赏快速输入。 – denver 2014-10-17 22:00:20

+0

这篇文章有点不清楚,但我认为这应该是一个或不是一个小提琴。更新:http://jsfiddle.net/0jozk5uL/5/ – dave 2014-10-17 22:08:57

+0

谢谢斯蒂芬和戴夫 - 解决方案是所有设置:http://jsfiddle.net/oef6td6b/ – denver 2014-10-17 22:10:09

0

我想这是你想要什么:

function update(dropdown, check) { 
    if(dropdown.options[dropdown.getSelectedIndex].text != "--Please select--") { 
    check.disabled = false; // if value is not equal to --Please select--... 
    } else { 
    check disabled = true; 
    } 
} 

var check // = checkbox elem 

var in1 // = dropdown 1 elem 
var in2 // = dropdown 2 elem 

in1.onchange = function() { 
    update(in1, check); // update checkbox 
} 

in2.onchange = function() { 
    update(in2, check); // update checkbox 
} 

希望这有助于对不起任何输入错误,我在手机上。

+0

我恭敬地不同意......我认为使用'.value'比使用'.text'更合适,并且盲目分配'.onchange = function ...'替换了现有的任何侦听器,而'.addEventListener()'允许构建一系列侦听器。 – 2014-10-17 22:36:57

+0

@StephenP我同意事件的听众,但我只是写了一个快速的答案。我认为使用.text不会有太大的缺点,但我的经验可能不如您。 – 2014-10-17 22:40:28