我有一個AJAX請求,它帶有一個文件夾列表,每個列表項旁邊都有一個復(fù)選框.如果我選中父文件夾旁邊的復(fù)選框,我會自動檢查所有子文件夾: var checkChildCheckBoxes = function(){
var isAlreadyChecked = $(this).attr('isChecked');
if(isAlreadyChecked == 'true'){
$(this).parents(':eq(1)').find('.userPermissionCheckBox').each(function(){
$(this).prop('checked', false);
});
$(this).attr('isChecked', 'false');
}
else{
$(this).parents(':eq(1)').find('.userPermissionCheckBox').each(function(){
$(this).prop('checked', true);
});
$(this).attr('isChecked', 'true');
}
}
這非常有效.我想要解決的是,如果您沒有選中父復(fù)選框,并且您選中了一個子復(fù)選框,它將自動檢查父級. 我嘗試這樣做沒有成功: if($(this).parent('ul').find('.userPermissionCheckBox:eq(0)').is('checked')){
}
else{
$(this).parent('ul').find('.userPermissionCheckBox:eq(0)').prop('checked', true);
}
我不想用代碼加載這個問題,所以我做了一個小提琴,顯示了列表的結(jié)構(gòu)以及我使用它的方式.轉(zhuǎn)到這里:http:///BTXNk/1/我是一個使用Javascript的n00b,希望這個問題不是愚蠢的.感謝您抽出寶貴時間閱讀它. http:///BTXNk/1/ 解決方法: 我認為這里存在一些邏輯問題. 假設(shè)您有父母,孩子和孩子的孩子,根據(jù)您的要求,當(dāng)您點擊未經(jīng)檢查的孩子時,會檢查當(dāng)前元素,并檢查此元素及其父元素,但是這個兄弟姐妹沒被檢查對嗎? 單擊父級會發(fā)生什么?沒有勾選復(fù)選框?因此,如果我決定選中所有復(fù)選框,但我已經(jīng)有一個子復(fù)選框檢查,這意味著我必須檢查父復(fù)選框以取消檢查所有內(nèi)容,然后再次單擊它以檢查所有復(fù)選框? 這不是一個非常好的用戶體驗.無論如何,我認為最好的辦法是將函數(shù)單擊事件分成三個不同的偵聽器,而不是嘗試在一個函數(shù)中執(zhí)行它.考慮到這一點,當(dāng)您檢查完所有內(nèi)容并且取消檢查其中一個子項時,我沒有寫出用例,那么仍應(yīng)檢查父復(fù)選框.你必須繼續(xù)擴展它們. <ul class="level-one">
<li class="level-one-closed">
<span class="level-one-folder">
<input type="checkbox" class="userPermissionCheckBox-level-one" />
Parent
</span>
<ul class="level-two">
<li class="level-two-closed">
<span class="level-two-folder">
<input type="checkbox" class="userPermissionCheckBox-level-two" />
Child
</span>
<ul class="level-three">
<li>
<span class="level-three-folder">
<input type="checkbox" class="userPermissionCheckBox-level-three" />
Child's Child
</span>
</li>
</ul>
</li>
<li class="level-two-closed">
<span class="level-two-folder">
<input type="checkbox" class="userPermissionCheckBox-level-two" />
Child
</span>
<ul class="level-three">
<li>
<span class="level-three-folder">
<input type="checkbox" class="userPermissionCheckBox-level-three" />
Child's Child
</span>
</li>
<li>
<span class="level-three-folder">
<input type="checkbox" class="userPermissionCheckBox-level-three" />
Child's Child
</span>
</li>
</ul>
</li>
</ul>
</li>
</ul>
var $levelOneCheck = $('.userPermissionCheckBox-level-one');
var $levelTwoCheck = $('.userPermissionCheckBox-level-two');
var $levelThreeCheck = $('.userPermissionCheckBox-level-three');
$levelOneCheck.click(function() {
var $isChecked = $(this).attr('isChecked');
if ($isChecked === 'true') {
$(this).attr('isChecked', 'false');
$levelTwoCheck.prop('checked', false).attr('isChecked', 'false');
$levelThreeCheck.prop('checked', false).attr('isChecked', 'false');
} else {
$(this).attr('isChecked', 'true');
$levelTwoCheck.prop('checked', true).attr('isChecked', 'true');
$levelThreeCheck.prop('checked', true).attr('isChecked', 'true');
}
});
$levelTwoCheck.click(function() {
var $isCheckedLevelTwo = $(this).attr('isChecked');
if ($isCheckedLevelTwo === 'true') {
$(this).attr('isChecked', 'false');
$(this).closest('.level-one-closed').find('.level-one-folder .userPermissionCheckBox-level-one').prop('checked', false).attr('isChecked', 'false');
$(this).closest('.level-two-closed').find('.level-three-folder .userPermissionCheckBox-level-three').prop('checked', false).attr('isChecked', 'false');
} else {
$(this).attr('isChecked', 'true');
$(this).closest('.level-one-closed').find('.level-one-folder .userPermissionCheckBox-level-one').prop('checked', true).attr('isChecked', 'true');
$(this).closest('.level-two-closed').find('.level-three-folder .userPermissionCheckBox-level-three').prop('checked', true).attr('isChecked', 'true');
}
});
$levelThreeCheck.click(function() {
var $isCheckedLevelTwo = $(this).attr('isChecked');
if ($isCheckedLevelTwo === 'true') {
$(this).attr('isChecked', 'false');
$(this).closest('.level-one-closed').find('.level-one-folder .userPermissionCheckBox-level-one').prop('checked', false).attr('isChecked', 'false');
$(this).closest('.level-two-closed').find('.level-two-folder .userPermissionCheckBox-level-two').prop('checked', false).attr('isChecked', 'false');
} else {
$(this).attr('isChecked', 'true');
$(this).closest('.level-one-closed').find('.level-one-folder .userPermissionCheckBox-level-one').prop('checked', true).attr('isChecked', 'true');
$(this).closest('.level-two-closed').find('.level-two-folder .userPermissionCheckBox-level-two').prop('checked', true).attr('isChecked', 'true');
}
});
http:///xzigraz/BTXNk/3/ 來源:https://www./content-1-265751.html
|