header('Content-Type: text/html; charset=utf-8');
<meta charset="utf-8">
document.querySelector('.form').addEventListener('input', e => {
const data = Array.from(
e.currentTarget.children,
n => Array.from(n.querySelectorAll('input'), m => m.value)
);
document.querySelector('.total').innerText = Array
.from(document.querySelectorAll('.row'))
.reduce((acc, n, i) => {
data[i].forEach((m, j) => n.children[j + 1].innerText = m);
return acc + (+data[i].at(-1) || 0);
}, 0);
});
const total = document.querySelector('.total');
const form = document.querySelector('.form');
const formRows = form.getElementsByClassName('d-flex');
const tableRows = document.getElementsByClassName('row');
form.addEventListener('input', ({ target: t }) => {
const inputBox = t.closest('.input-box');
const formRow = inputBox.parentNode;
const iRow = Array.prototype.indexOf.call(formRows, formRow);
const iCol = -~Array.prototype.indexOf.call(formRow.children, inputBox);
tableRows[iRow].cells[iCol].textContent = t.value;
if (iCol === formRow.children.length) {
total.textContent = Array.prototype.reduce.call(
formRows,
(acc, n) => acc + (n.lastElementChild.children[0].value | 0),
0
);
}
});
let checked = null;
$('input').click(function() {
checked = checked === this.value ? null : this.value;
this.checked = !!checked;
});
// или
document.querySelectorAll('input').forEach(function(n) {
n.addEventListener('click', this);
}, function({ target: t }) {
t.checked = !!(this[0] = this[0] === t ? null : t);
}.bind([]));
const $checkboxes = $('input').change(function() {
if (this.checked) {
$checkboxes.not(this).prop('checked', false);
}
});
// или
const checkboxes = document.querySelectorAll('input');
const onChange = e => checkboxes.forEach(n => n.checked &&= n === e.target);
checkboxes.forEach(n => n.addEventListener('change', onChange));
надо открыть этот файл в редакторе и внести
server_names_hash_bucket_size
. Надо комментарий (сомвол #) убрать, если он есть.Как открыть этот файл в редакторе?
vi /etc/nginx/nginx.conf
- vi это редактор.В терминале появляется куча строк и надпись
ESC
затем :
затем q!
и Enter
$('.filter').change(({ target: t }) => {
$(`[name="${$(t).closest('.button').data('size')}"]`)
.closest('.product-box')
.toggleClass('hidden', !t.checked);
}).find(':checked').change();
const filter = document.querySelector('.filter');
filter.addEventListener('change', ({ target: t }) => {
const size = t.closest('.button').dataset.size;
document.querySelectorAll(`[name="${size}"]`).forEach(n => {
n.closest('.product-box').classList.toggle('hidden', !t.checked);
});
});
filter.querySelectorAll(':checked').forEach(n => {
n.dispatchEvent(new Event('change', { bubbles: true }));
});
- .box.closed .list {
- display: none;
- }
+ .box .list {
+ display: none;
+ }
+ .box.opened .list {
+ display: block;
+ }
const containerSelector = '.section';
const itemSelector = '.box';
const buttonSelector = '.control-label';
const activeClass = 'opened';
// jquery, как вы и хотели
$(itemSelector).on('click', buttonSelector, ({ delegateTarget: t }) => $(t)
.toggleClass(activeClass)
.closest(containerSelector)
.find(itemSelector)
.not(t)
.removeClass(activeClass)
);
// или, к чёрту jquery;
// вешаем обработчик клика на каждый заголовок
const onClick = ({ currentTarget: t }) => t
.closest(containerSelector)
.querySelectorAll(itemSelector)
.forEach(function(n) {
n.classList[n === this ? 'toggle' : 'remove'](activeClass);
}, t.closest(itemSelector));
document
.querySelectorAll(`${containerSelector} ${buttonSelector}`)
.forEach(n => n.addEventListener('click', onClick));
// или, добавляем обработчик клика один раз для всех
document.addEventListener('click', ({ target: t }) => t
.closest(buttonSelector)
?.closest(containerSelector)
?.querySelectorAll(itemSelector)
.forEach(n => n.classList[n.contains(t) ? 'toggle' : 'remove'](activeClass))
);
<div id="id">
<input type="checkbox">checkbox 1
<input type="checkbox">checkbox 2
<input type="checkbox">checkbox 3
</div>
<script>
$('#id input:checkbox').click(function(){
if ($(this).is(':checked')) {
$('#id input:checkbox').not(this).prop('checked', false);
}
});
</script>
$('.close').on('click', function (e) {
e.stopPropagation(); // вот так
$('.section').removeClass('opened');
});
const $section = $('.section').on('click', () => $section.addClass('opened'));
$section.find('.close').on('click', e => {
e.stopPropagation();
$section.removeClass('opened');
});
// или
const section = document.querySelector('.section');
section.addEventListener('click', () => section.classList.add('opened'));
section.querySelector('.close').addEventListener('click', e => (
e.stopPropagation(),
section.classList.remove('opened')
));
const $section = $('section').click(e => {
$section.toggleClass('opened', !$(e.target).is('.close'));
});
// или
document.querySelector('.section').addEventListener('click', e => {
e.currentTarget.classList.toggle('opened', !e.target.matches('.close'));
});
const BASE_VALUE = 100;
document.querySelector('.container').addEventListener('change', e => {
document.querySelector('.total').innerText = Array
.from(e.currentTarget.querySelectorAll('input:checked'))
.reduce((acc, n) => acc + +n.value, BASE_VALUE);
});