【发布时间】:2020-08-11 16:44:03
【问题描述】:
我正在尝试使用 alpine js 通过使用 alpine js 分别选中或取消选中全选复选框来选中或取消选中所有框,谁能指出我正确的方向...谢谢
【问题讨论】:
标签: javascript alpine.js
我正在尝试使用 alpine js 通过使用 alpine js 分别选中或取消选中全选复选框来选中或取消选中所有框,谁能指出我正确的方向...谢谢
【问题讨论】:
标签: javascript alpine.js
由于没有一个预览替代方案对我有用,我不得不进行研究,然后使用 x-model 找到了更好的解决方案。
复选框:
<div x-data="checkboxes">
<input class="item-select-input" type="checkbox" value="001" x-model="itemsCard">
<input class="item-select-input" type="checkbox" value="002" x-model="itemsCard">
<input class="item-select-input" type="checkbox" value="003" x-model="itemsCard">
</div>
选择所有输入:
<input class="form-check-input" type="checkbox" x-on:click="selectAllCheckboxes">
高山函数:
<script>
document.addEventListener('alpine:init', () => {
Alpine.data('checkboxes', () => ({
selectAll: false,
itemsCard: [],
selectAllCheckboxes() {
this.selectAll = !this.selectAll
let checkboxes = document.querySelectorAll('.item-select-input');
let allValues = [];
[...checkboxes].map((el) => {
allValues.push(el.value)
this.itemsCard = this.selectAll ? allValues : []
})
}
}))
})
</script>
【讨论】:
我的简单解决方案。
全选:
<a href="javascript:void(0);" x-on:click="toggleAllCheckboxes('permissions[]')" class="btn btn-sm btn-dark">Select All</a>
复选框:
<input type="checkbox" name="permissions[]">
Javascript 函数:
function toggleAllCheckboxes(elementName) {
const checkboxes = document.getElementsByName(elementName);
checkboxes.forEach(function (ele) {
ele.toggleAttribute('checked');
});
}
【讨论】:
根据 Michael Gingras 和 Najmus Sakib 的回答,我找到了更好的解决方案。
这适用于选中和取消选中单独选中的复选框。
<input @click="toggleAllCheckboxes()" type="checkbox" class="form-checkbox">
<input id="checkbox1" type="checkbox">
<input id="checkbox2" type="checkbox">
<input id="checkbox3" type="checkbox">
<input id="checkbox4" type="checkbox">
<script>
function selectAllData() {
return {
selectall: false,
toggleAllCheckboxes() {
this.selectall = !this.selectall
checkboxes = document.querySelectorAll('[id^=checkbox]');
[...checkboxes].map((el) => {
el.checked = this.selectall;
})
}
}
}
</script>
【讨论】:
我还注意到 Najmus 的回答中存在一个问题 - 如果您单击单个复选框,它不会与 selectAll 复选框同步。
为了解决这个问题,我能够创建一个函数来搜索具有给定 ID 的所有复选框,并手动将它们的选中值设置为 true。
这要求您设置所有要使用 Id 进行检查的复选框。在以下示例中,我使用了checkbox{id},其中 id 是复选框的数字索引。
<input x-on:click="selectAllCheckboxes()" type="checkbox">
<input id="checkbox1" type="checkbox">
<input id="checkbox2" type="checkbox">
<input id="checkbox3" type="checkbox">
<script>
function checked() {
return {
selectAllCheckboxes() {
checkboxes = document.querySelectorAll('[id^=checkbox]');
[...checkboxes].map((el) => {
el.checked = true;
})
}
}
}
</script>
【讨论】:
你可以试试这个:
<script src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v1.10.1/dist/alpine.js" defer></script>
<div x-data="AlpineSelect()">
<div>
<input type="checkbox" x-bind:checked="selectall">Select 1
<input type="checkbox" x-bind:checked="selectall">Select 2
<input type="checkbox" x-bind:checked="selectall">Select 3
</div>
<div>
<input type="checkbox" @click="selectall=!selectall">Select All
</div>
</div>
<script>
function AlpineSelect(){
return {
selectall: false,
};
}
</script>
您可以找到源代码:here
【讨论】:
<div x-data="selectBox()">
<button x-on:click="selectAll">select all</button>
<button x-on:click="unselectAll">unselect all</button>
<template x-for="name in allNames">
<input type="checkbox" :value="name" x-model="checkedNames">
</template>
<span x-text="JSON.stringify(checkedNames)"></span>
</div>
<script>
function selectBox() {
return {
checkedNames: [],
allNames: ['bike', 'car', 'boat'],
selectAll() { this.checkedNames = this.allNames },
unselectAll() { this.checkedNames = []},
}
}
</script>
【讨论】: