2017-06-02 6 views
1

は、私が持っていたときに戻って初期状態に戻る:はunclickチェックボックス

<label><input type="checkbox" name="all"> text</label> 
<label><input type="checkbox" name="js-frameworks"> text</label> 

const all = document.getElementsByName('all')[0]; 
const jsFrameworks = document.getElementsByName('js-frameworks')[0]; 

this.addEventListener("change", function() { 
    if (all.checked) { 
    jsFrameworks.parentNode.className = 'readonly'; 
    } 
}); 

は私がチェックボックスにクラスの選択を解除したときに「読み取り専用」私があれば与えチェックボックスを選択したときに、コードが唯一の実行時に削除されることを考えました条件は真です。私はif条件をエスケープしているように見えないので、クリックとunclickの切り替えのようなものになります。どうやってやるの?

おかげ

+0

は以来、Bloomberg58変更@ – Bloomberg58

+0

... 'change'は' text'フィールドに対して、より正確である....代わりにchange' 'でも、リスナー' click'を使用しようとクリックし、チェックボックスのために効果的に等価ですそれをクリックすると常に変更されます。 – Barmar

+0

なぜクラスが削除されると思いますか?何かを追加しないことは、それを削除することと同じではありません。 – Barmar

答えて

1

変更もこの方法:

this.addEventListener("change", function() { 
    if (all.checked) { 
    jsFrameworks.parentNode.className = 'readonly'; 
    } else { 
    jsFrameworks.parentNode.className = ''; 
    } 
}); 

未確認のクラスを削除するこの方法です。

UPDATE:

それとも、あなたの要素が前に持っているかもしれクラス救うことができる:

let classesBefore = jsFrameworks.parentNode.className; 
this.addEventListener("change", function() { 
    if (all.checked) { 
    jsFrameworks.parentNode.className = classesBefore + ' readonly'; 
    } else { 
    jsFrameworks.parentNode.className = classesBefore; 
    } 
}); 
+0

これはこの状況では機能しますが、parentNode上にある他のクラスはすべて削除されることに注意してください。 – Eggs

-1

すると、この

this.addEventListener("click", function() { 
    this.parentNode.toggle('readonly'); 
} 
+0

私はclassList.toggle()を試しましたが、私がクラスの選択を解除するときにそのクラスを削除するチェックボックスを選択するたびにクラスを削除します。 elseを使うのではなく、もっと効率的な方法を探していましたが、Merunasのソリューションが最もうまくいきます。 –

+0

'toggle()'はjQuery関数であり、要素を隠して表示するためのものです。 'toggleClass()'はクラスを変更するためのものです。しかし、彼はjQueryを使用していません。 – Barmar

0

を試してみてはこれを試してみてください。

const all = document.getElementsByName("all")[0]; 
const jsFrameworks = document.getElementsByName("js-frameworks")[0]; 

this.addEventListener("change", function() { 
    if (all.checked) { 
    jsFrameworks.parentNode.classList.add("readonly"); 
    } else if (!all.checked) { 
    jsFrameworks.parentNode.classList.remove("readonly");  
    } 
}); 
+0

なぜ彼はこれを試してみるべきですか?問題の内容とその修正方法を説明します。 – Barmar

+0

'else'は'!all.checked'以外の唯一の可能性があるので、 'else'を使うべきです。 – Barmar

+0

@Barmar、それは私がそれをテストとして動作します。あなたの2番目の質問に答えて、私は他の可能な結果を​​認識していないかもしれないので、私は他を防弾しています。 – Eggs

関連する問題