昨日別の post を作成しましたが、成功しませんでした。私はこれに対する解決策を見つけることができないので、アイデアを並べ替えてもう一度尋ねようとします(私は初心者で、私は本当に一生懸命努力しています)。
問題は、Bootstrapに基づいてこのテンプレートを使用していることです。これは、ファイルの1つから直接見ることができ、プロジェクトで使用しているコードです。
htmlスニペット:
<div class="hide" id="states">
<div class="control-group">
<label class="control-label">Seleccione</label>
<div class="controls">
<label class="checkbox span4">
<input type="checkbox" value="all" id="allstates" name="all"/>Todas
</label>
<label class="checkbox span4">
<input class="states" type="checkbox" value="Caba" id="" name="st[]"/>Ciudad Autónoma de Buenos Aires
</label>
<label class="checkbox span4">
<input class="states" type="checkbox" value="Buenos Aires" id="" name="st[]"/> Buenos Aires
</label>
<label class="checkbox span4">
<input class="states" type="checkbox" value="Catamarca" id="" name="st[]"/> Catamarca
</label>
</div>
</div>
</div>
多くの検索の後、コードを次のように調べることで調べました(スニペット):
<div class="controls">
<label class="checkbox span4">
<div class="checker" id="uniform-allstates">
<span>
<input type="checkbox" value="all" id="allstates" name="all">
</span>
</div>Todas
</label>
<label class="checkbox span4">
<div class="checker">
<span>
<input class="states" type="checkbox" value="Caba" id="" name="st[]">
</span>
</div> Ciudad Autónoma de Buenos Aires
</label>
<label class="checkbox span4">
<div class="checker">
<span>
<input class="states" type="checkbox" value="Buenos Aires" id="" name="st[]">
</span>
</div> Buenos Aires
</label>
<label class="checkbox span4">
<div class="checker">
<span>
<input class="states" type="checkbox" value="Catamarca" id="" name="st[]">
</span>
</div> Catamarca
</label>
</div>
ご覧のとおり、別のdivと別のスパンが追加されているため(理由と方法がわからない)、私は今、私が抱えているDOMの問題だと推測しています。
これは私のjsファイルのスニペットです:
$('#allstates').click(function() {
$('.checkbox').find('span').addClass('checked');
});
そのため、この関数は、私が持っているすべてのチェックボックスを選択します(別のカテゴリに属しているために必要ないチェックボックスも)。
Divとspanが追加された理由と、必要なチェックボックスのみを選択する方法を知りたいです。
そのために、私はこのようなコードを試しましたが、成功しませんでした:
テスト1
$('#allstates').click(function() {
if ($(this).is(':checked')) {
$('span input').attr('checked', true);
} else {
$('span input').attr('checked', false);
}
});
test2
$('#allstates').click(function() {
$(".states").prop("checked",$("#allstates").prop("checked"))
});
そして私が消した他のもの。
注:検査時にjsエラーは表示されません
この関数は、チェックするはずのチェックボックスをすべてチェックしたと述べたので、解決策を探していました:
$('#allstates').click(function() {
$('.checkbox').find('span').addClass('checked');
});
しかし、これは私が望んでいたものではありません。また、コードを検査するときにコードが「異なる」ことに気づいたことにも言及しました(ChromeでF12を使用)。
コードが変更されているため、「スパンタグ」検索を開始したクラス(チェックボックス)を変更する必要があるため、クラスチェックボックスをid状態に変更する必要があることに気付きました。これが結果です。
$('#allstates').click(function() {
if($(this).attr("checked")){
$('#states').find('span').addClass('checked');
}else{
$('#states').find('span').removeClass('checked');
}
});
これでようやく動作します。
また、チェックボックスの選択時にpropをtrueに追加することが重要です。
$("#checkAll").click(function(){
var check = $(this).prop('checked');
if(check == true) {
$('.checker').find('span').addClass('checked');
$('.checkbox').prop('checked', true);
} else {
$('.checker').find('span').removeClass('checked');
$('.checkbox').prop('checked', false);
}
});
次のようなコードを探していると思います:
$(document).ready(function()
{
$("#allstates").on("change", function()
{
var checked = $(this).prop("checked");
$(this).parents(".controls")
.first()
.find("input[type=checkbox]")
.prop("checked", checked);
});
});
ID allstates
のチェックボックスの状態が変わったら、チェックボックスの値を取得し、controls
というクラスの最初の親html要素を見つけてから、その要素のすべてのチェックボックスのみを更新します。チェックされた値。
シンプルなbootstrapチェックボックス
<label><input type="checkbox" value="">Option 1</label>
Chrome devツールでデバッグする場合、ラベルは https://tinker.press/images/bootstrap-checkbox-label-2017-01-17_084755.png のようになります
チェックボックスの状態を変更するには、単にtrue|false
オン lable.control.checked
label.control.checked = false; //uncheck
label.control.checked = true; //check