с перезагрузкой страницы
el.remove()
) или делайте неактивными (el.disabled = true
). Например:<form @submit="onSubmit">
<div v-for="(v, k) in formData">
<div>{{ k }}:</div>
<div><input v-model="formData[k]" :name="k" :ref="k"></div>
</div>
<button>submit</button>
</form>
data: () => ({
formData: {
forename: '',
surname: '',
email: '',
},
}),
methods: {
onSubmit() {
Object.entries(this.formData).forEach(([ k, v ]) => !v && (this.$refs[k][0].disabled = true));
},
},
arr.reduce((acc, n, i) => (
(i && (acc[acc.length - 1].length + !(acc.length & 1) !== 3)) || acc.push([]),
acc[acc.length - 1].push(n),
acc
), [])
const result = arr1.map((n, i) => {
const index = Math.min(i * 2, ((arr2.length - 2) / 2 | 0) * 2);
return `name: ${n} val1: ${arr2[index]} val2: ${arr2[index + 1]}`;
});
result.forEach(alert);
preg_match_all('~(?<=<p>).+?(?=</p>)~', $str, $match);
$data = array_map(function($n) {
return explode('-', $n, 2);
}, $match[0]);
switch (true) {
case one.includes(inp):
...
break;
case two.includes(inp):
...
break;
}
const arr = [
{
values: [ ... ],
action: () => { ... },
},
{
values: [ ... ],
action: () => { ... },
},
];
arr.find(n => n.values.includes(inp))?.action();
v-model
.setInterval($items => {
$items.each(i => $items.eq(i).css({
left: `${Math.random() * window.innerWidth}px`,
top: `${Math.random() * window.innerHeight}px`,
}));
}, 500, $элементыКоторымНадоЗадаватьСлучайныеКоординаты);
const formTemplate = `<здесь html-код формы>`;
$(document).on('change', 'селектор чекбокса', function() {
const $el = $(this).closest('селектор формы');
if (this.checked) {
$el.after(formTemplate);
} else {
$el.nextAll('селектор формы').remove();
}
});
const findPath = (obj, val) =>
Object.is(obj, val)
? []
: Object.entries(obj instanceof Object ? obj : {}).reduce((found, n) => {
if (!found) {
found = findPath(n[1], val);
if (found) {
found.unshift(n[0]);
}
}
return found;
}, null);
function findPath(obj, val) {
for (const stack = [ [ obj, [] ] ]; stack.length;) {
const [ n, keys ] = stack.pop();
if (Object.is(n, val)) {
return keys;
}
if (n instanceof Object) {
stack.push(...Object.entries(n).reverse().map(([ k, v ]) => [ v, [ ...keys, k ] ]));
}
}
return null;
}
computed: {
tasksGroupedByCategory() {
return this.tasks.reduce(
(acc, n) => (acc[n.category].push(n), acc),
Object.fromEntries(this.boards.map(n => [ n.name, [] ]))
);
},
},
<div v-for="b in boards">
<h2>{{ b.title }}</h2>
<div v-for="n in tasksGroupedByCategory[b.name]">
{{ n.title }}
</div>
</div>
<h1 class="header">click me</h1>
<h1 class="header">click me</h1>
<h1 class="header">click me</h1>
const text = [ 'hello, world!!', 'fuck the world', 'fuck everything' ];
$('.header').click(function() {
const index = $(this).data('index') || 0;
$(this).text(text[index]).data('index', (index + 1) % text.length);
});
const select = document.querySelector('[name="id_car_mark"]');
blackList
:const options = Object.fromEntries(Array.from(select, n => [ n.innerText, n ]));
select.prepend(...blackList.reduce((acc, n) => ((n = options[n]) && acc.push(n), acc), []));
select.append(...Array.prototype.filter.call(select, function(n) {
return !this.has(n.textContent);
}, new Set(blackList)));
const blockSelector = '.block';
const buttonSelector = `${blockSelector} button`;
const itemSelector = `${blockSelector} span`;
document.addEventListener('click', e => e
.target
.closest(buttonSelector)
?.closest(blockSelector)
?.append(document.querySelector(itemSelector))
);
const item = document.querySelector(itemSelector);
const onClick = e => e.currentTarget.closest(blockSelector).appendChild(item);
document.querySelectorAll(buttonSelector).forEach(n => n.addEventListener('click', onClick));
const icons = {
one: [ 'url иконки раскрытия одного элемента', 'и закрытия' ],
all: [ 'url иконки раскрытия всех', 'что здесь должно быть, думаю догадаетесь' ],
};
const getState = el => $(el)
.closest('.team__info-worklog')
.find('.worklog-table')
.get()
.map(n => $(n).is(':visible'));
const setState = (el, state) => $(el)
.closest('.team__info-worklog')
.find('.worklog-table').each((i, n) => $(n)[state[i] ? 'slideDown' : 'slideUp']()).end()
.find('.worklog-expend-all img').attr('src', icons.all[+state.some(Boolean)]).end()
.find('.worklog-list__expend img').attr('src', i => icons.one[+state[i]]);
const createUpdater = f => e => setState(e.target, f(getState(e.target), e));
$('.worklog-expend-all').on('click', createUpdater(state => {
return Array(state.length).fill(!state.some(Boolean));
}));
$('.team__info-worklog').on('click', '.worklog-list__expend', createUpdater((state, e) => {
const index = $(e.target).closest('.worklog-list__row').index();
return state.map((n, i) => i === index ? !n : n);
}));
создаёт новый массив со всеми значениями, для которых функцияcallback
вернула значение, которое может быть приведено кtrue
true
, если элемент массива является числом, то есть, в результирующий массив попадают только числа, и неважно, каковы их значения. Во втором случае вы возвращаете сам элемент, если он является числом, а нули, они да - имеют своим булевым эквивалентом false
, поэтому и отбрасываются.