2

フォームに条件付きタイプのラジオボタンを設定しようとしていますが、実際にここで見つけたJavaScriptを次のように変更しました。

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>

jsフィドル

それはすべて機能しますが、誰かが[給与]をクリックしてオプションを選択し、気が変わった場合、[フラット]をクリックすると、以前に[給与]で行った選択をクリアしたいと思います(逆も同様です)いくつか試してみましたそれはうまくいかないので、彼らが何をしているのか知っている人に尋ねようと思いました。ありがとう。

4

4 に答える 4

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>

optionsまた、インライン スタイルを削除し、 set toという CSS クラスを作成しましたdisplay:none

.options {
    display:none;
}

jsフィドル

于 2013-04-26T00:18:46.380 に答える
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
      }
    }
    
于 2013-04-25T23:11:39.073 に答える
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 フィドルのデモ

もちろん、これは少し修正された HTML に基づいており、この場合はクラスを使用して関連する要素を識別しますが、data-*代わりに属性を使用することもできます。

document.getElementsByClassName()残念ながら、すべてのブラウザーでサポートされているわけではありません。特に Internet Explorer では、バージョン 9 まで( MDNおよびQuirksmodeによると) サポートされていません。

于 2013-04-25T23:14:57.120 に答える