Проблема в том, что код <...> не удаляет класс
.js-contacts-form
добавляет класс обратно. Останавливайте всплытие в обработчике клика по .detail-work__close
; или проверяйте перед добавлением класса, где был клик и не добавляйте класс, если... ну, думаю понятно. выполняются одновременно
new Promise
, чтобы получить желаемую асинхронность. Проведите небольшой эксперимент - откройте консоль, выполнитеconsole.log('щас будем создавать промис');
new Promise(r => {
console.log('создаём промис');
setTimeout(() => {
console.log('так, сейчас дёрнем резолв');
r();
console.log('резолв дёрнули');
});
}).then(() => console.log('зарезолвились, наконец-то'));
console.log('промис создан');
Чето я вообще ничего найти не могу.
const $block = $('.picture__text');
const text = $block.text();
const itemSelector = '.pictures__another';
$(document).on('mouseover mouseout', itemSelector, function(e) {
$block.text(e.type === 'mouseout' ? text : $(this).text());
});
// или
$(itemSelector).hover(
e => $block.text($(e.currentTarget).text()),
() => $block.text(text)
);
Скорее всего я где-то не обнулил интервал или таймаут.
perPage: 10, // или 20, или 50, это вам виднее... да и настраиваемым можно его сделать
page: 1,
pages() {
return Math.ceil(this.items.length / this.perPage);
},
pageData() {
const end = this.page * this.perPage;
return this.items.slice(end - this.perPage, end);
},
<div v-for="item in pageData">
...
goTo(page) {
this.page = Math.max(1, Math.min(this.pages, page));
},
next(change) {
this.goTo(this.page + change);
},
<button @click="goTo(1)">в начало</button>
<button @click="next(-1)">предыдущая страница</button>
<button @click="next(+1)">следующая страница</button>
<button @click="goTo(pages)">в конец</button>
document.addEventListener('focus', function(e) {
if (e.target.tagName === 'INPUT') {
// здесь ваш код
}
}, true);
const getLeapYears = (start, end) => Array
.from({ length: end - start + 1 }, (n, i) => start + i)
.filter(n => ((n % 100) && !(n % 4)) || !(n % 400));
console.log(getLeapYears(1888, 2099));
function* getLeapYears(start, end) {
for (let i = Math.ceil(start / 4) * 4; i <= end; i += 4) {
if ((i % 100) || !(i % 400)) {
yield i;
}
}
}
console.log(...getLeapYears(1888, 2099));
'2' > '10'
, всё правильно.mutations: {
saveSort: (state, items) => items.forEach((n, i) => n.sort = i),
},
:item-value="itemValue"
methods: {
itemValue() {
...
p test: {{ isNewDesign }}
const containerSelector = '.choose-buttons';
const buttonSelector = '.btn';
const activeClass = 'active';
const maxActive = 3;
$(containerSelector).on('click', buttonSelector, function(e) {
const numActive = $(`${buttonSelector}.${activeClass}`, e.delegateTarget).length;
const $this = $(this);
if (numActive < maxActive || $this.hasClass(activeClass)) {
$this.toggleClass(activeClass);
}
});
// или
document.querySelectorAll(containerSelector).forEach(n => {
n.addEventListener('click', onClick);
});
function onClick(e) {
const button = e.target.closest(buttonSelector);
if (button) {
const active = [...this.querySelectorAll(`${buttonSelector}.${activeClass}`)];
if (active.length < maxActive || active.includes(button)) {
button.classList.toggle(activeClass);
}
}
}
Например, я мог получить все свои ответы по тегу документация (что меня больше всего интересует) таким запросом: https://toster.ru/user/eduardtibet/answers?tag=док...
mounted не подходит так как, он вызывается при каждом переходе
char c = 'a';
char str[9] = { 0 };
for (int i = 8; i--; ) {
str[7 - i] = !!(c & (1 << i)) + '0';
}
printf("%s", str);