2013-04-25 15 views
1

我试图建立一个形式的条件式单选按钮,其实我修改一些JavaScript我发现这里看起来像这样:JavaScript有条件 - 取消选中隐藏div中的单选按钮?

function hideStuff(id) { 
    document.getElementById('flatDiv').style.display = 'none'; 
    document.getElementById('salaryDiv').style.display = 'none'; 
} 

function checkType(selectedType) { 

    if (selectedType == 'flat') { 
     document.getElementById('flatDiv').style.display = 'block'; 
     document.getElementById('salaryDiv').style.display = 'none'; 
    } else { 
     document.getElementById('flatDiv').style.display = 'none'; 
     document.getElementById('salaryDiv').style.display = 'block'; 
    } 
} 

和HTML是这样的:

<input type="radio" name="Type" value="flat" onclick="checkType(this.value)" />Flat 
<input type="radio" name="Type" value="salary" onclick="checkType(this.value)" />Salaray 
<br /> 
<div id="salaryDiv" style="display:none;">Choose an option: 
    <input type="radio" name="salaryType" value="1x" />1x 
    <input type="radio" name="salaryType" value="2x" />2x 
    <input type="radio" name="salaryType" value="3x" />3x</div> 
<div id="flatDiv" style="display:none;">Choose an option: 
    <input type="radio" name="flatType" value="$25,000" />$25,000 
    <input type="radio" name="flatType" value="$50,000" />$50,000</div> 

jsFiddle

这所有的作品,但如果有人点击薪水,并选择一个选项,然后改变主意,当他们点击扁我希望搞清楚他们之前薪酬(和副VERS所作出的任何选择a)我尝试了一些不起作用的东西,所以我想我会问一个知道他们在做什么的人。谢谢。

+0

*什么*你尝试过不工作? – 2013-04-25 23:08:39

回答

1

我建议使用一个JavaScript库,但我离题。我修改了代码以包含addEvent,而不是在标记中分配事件处理程序。它看起来更干净。你可以使用它。

(function() { 
    var inputs = document.getElementsByTagName('input'); 
    for (var i = 0; i < inputs.length; i++) { 
     if (inputs[i].getAttribute('name') === "Type") { 
      addEvent('click', inputs[i], function (e) { 
       var source = event.target || event.srcElement; 
       checkType(source.value); 
      }); 
     } 
    } 

    function hideStuff(id) { 
     document.getElementById('flatDiv').style.display = 'none'; 
     document.getElementById('salaryDiv').style.display = 'none'; 
    } 

    // What you had before but now it clears the radios of the other type 
    function checkType(selectedType) { 
     if (selectedType == 'flat') { 
      clear("salaryType"); 
      document.getElementById('flatDiv').style.display = 'block'; 
      document.getElementById('salaryDiv').style.display = 'none'; 
     } else { 
      clear("flatType"); 
      document.getElementById('flatDiv').style.display = 'none'; 
      document.getElementById('salaryDiv').style.display = 'block'; 
     } 
    } 

    function clear(str) { 
     for (var i = 0; i < inputs.length;i++) { 
      if (inputs[i].getAttribute('name') === str) { 
       inputs[i].checked = false; 
      } 
     } 
    } 
})(); 
function addEvent(evnt, elem, func) { 
    if (elem.addEventListener) // W3C DOM 
     elem.addEventListener(evnt,func,false); 
    else if (elem.attachEvent) { // IE DOM 
     elem.attachEvent("on"+evnt, func); 
    } 
    else { // No much to do 
     elem[evnt] = func; 
    } 
} 

所有东西都包裹在一个匿名函数中以减少全局性。 addEvent函数允许跨浏览器添加动态事件侦听器。

这个JavaScript对应于以下标记:

<input type="radio" name="Type" value="flat" id="flatRadio" />Flat 
<input type="radio" name="Type" value="salary" id="salaryRadio" />Salary 
<br /> 
<div id="salaryDiv" class="options">Choose an option: 
    <input type="radio" name="salaryType" value="1x" />1x 
    <input type="radio" name="salaryType" value="2x" />2x 
    <input type="radio" name="salaryType" value="3x" />3x 
</div> 
<div id="flatDiv" class="options">Choose an option: 
    <input type="radio" name="flatType" value="$25,000" />$25,000 
    <input type="radio" name="flatType" value="$50,000" />$50,000 
</div> 

我也删除内嵌样式并提出被称为CSS类options设置为display:none

.options { 
    display:none; 
} 

jsFiddle

0

我使用的技术是添加一个“标志”类(即虚拟类)到选定的选项。这使您能够对所选选项进行样式设置,并且可以轻松清除它。

  1. CSS
#flatDiv, #salaryDiv{display: block;} 
.selected{ display: none; } 
  1. 的JavaScript

    function hideStuff(id) { 
        document.getElementById('flatDiv').className ="selected"; 
        document.getElementById('salaryDiv').className ="selected"; 
    } 
    
    function checkType(selectedType){ 
        var fd = document.getElementById('flatDiv'); 
        var sd = document.getElementById('salaryDiv'); 
    
        if (selectedType == 'flat'){ 
         fd.className = ""; // clear it 
         sd.className = "selected"; 
        } else{ 
         fd.className = "selected"; 
         sd.className = ""; // clear it 
        } 
    } 
    
+0

这不符合OP的要求。 – SomeShinyObject 2013-04-25 23:49:04

+0

“,如果有人点击工资并选择一个选项,然后改变主意,当他们点击Flat时,我想清除他们之前在Salary(以及反之亦然)下做出的选择,”这段代码就是这样做的。 – carrabino 2013-05-08 19:11:21

+0

',但如果有人点击薪水并选择了一个选项,然后改变了想法,当他们点击平面时,我想清除他们之前在薪水下做出的任何**选择(反之亦然)。关键字是选择,因为在单选按钮不再被选中。 – SomeShinyObject 2013-05-08 22:40:23

0

我建议:

function hideStuff(elClassName) { 
    // call the function to hide specific elements (based on a class-name) 
    var els = document.getElementsByClassName(elClassName); 
    for (var i = 0, len = els.length; i < len; i++){ 
     // iterate through those elements and hide them 
     els[i].style.display = 'none'; 
    } 
} 

function checkType(selectedType) { 
    var toggles = document.getElementsByClassName('toggle'), 
     inputs; 
    for (var i = 0, len = toggles.length; i < len; i++){ 
     // sets the current node's display to 'block' if the id matches, and 'none' if not 
     toggles[i].style.display = toggles[i].id == selectedType + 'Div' ? 'block' : 'none'; 
     if (toggles[i].style.display == 'none') { 
      // if an element is hidden, the radios therein are all unchecked 
      inputs = toggles[i].getElementsByTagName('input'); 
      for (var c = 0, cLen = inputs.length; c < cLen; c++){ 
       inputs[c].checked = false; 
      } 
     } 
    } 
} 

hideStuff('toggle'); 

JS Fiddle demo

这当然是基于稍微修改的HTML,在这种情况下使用类来标识相关元素,但可以使用data-*属性代替。

document.getElementsByClassName()是,不幸的是,不是所有的浏览器支持,特别是Internet Explorer不支持它(according to MDNQuirksmode),直到版本9

1

创建功能clearRadio并将其分配给无线输入flatsalaryonchange属性。

HTML

<input type="radio" name="Type" value="flat" onclick="checkType(this.value)" onchange="clearRadios('flatDiv')" />Flat 
    <input type="radio" name="Type" value="salary" onclick="checkType(this.value)" onchange="clearRadios('salaryDiv')" />Salary 

的JavaScript

function clearRadios(id) { 
    var Radios = document.getElementById(id).getElementsByTagName('input'); 
    for (var i = 0; i < Radios.length; i++) { 
     if (Radios[i].type == 'radio') { 
      Radios[i].checked = false; 
     } 
    } 
} 

功能会发现与传递id在div内的所有无线电输入和清除它们。

jsfiddle