$('.menu__item').click(function(){
$('.menu__item').each(function() {
$(this).removeClass('active')
})
$(this).toggleClass('active');
// от кода ниже вообще можно избавится и прописать все на css
if($(this).hasClass('active')){
$(this).css({'background': 'linear-gradient(90deg, rgba(255,0,0,1) 0%, rgba(136,0,255,1) 1%, rgba(255,0,0,1) 100%)'});
$(this).next('.sub_menu__list').css({'opacity': 1, 'visibility': 'visible'});
} else{
$(this).css({'background': 'inherit'});
$(this).next('.sub_menu__list').css({'opacity': 0, 'visibility': 'hidden'});
}
})
Замыкание — это когда функция умеет запоминать и имеет доступ к лексической области видимости даже тогда, когда эта функция выполняется вне своей лексической области видимости.
class User {
constructor(username, password) {
this.username = username;
this.password = password;
}
}
const bd = [];
function addUser(username = '', password = '') {
if(username.length <= 0 && password.length <= 0) return;
bd.push(new User(username, password))
}
addUser('Login', 'password')
addUser()
addUser('Login2', 'password2')
console.log(bd)
if(this.classList.contains('create_button')){
this.classList.toggle('exit')
block_2.style.opacity = 1;
}
if(this.classList.contains('exit')){
this.classList.toggle('create_button')
block_2.style.opacity = 0;
}
setInterval(() => {
const currentMin = new Date().getMinutes();
if (currentMin % 4 === 0) { // будет срабатывать каждую секунду на протяжении минуты доработай условие, если нужно 1 раз
console.log(currentMin)
}
}, 1000)
const arr = [
[
{name: 'One'},
{name: 'Two'},
{name: 'Three'},
]
];
let str = '';
for(let i = 0; i < arr[0].length; i++) {
str = str + arr[0][i].name;
}
console.log(str) // "OneTwoThree"
i <= arr[0].length
на последней итерации равна 3, но элемента массива 3 нет. И лучше определять переменные и называть лучше, а то ты итерируешь объект, а не массив судя по имени переменной let url = new URL(window.location.href);, что будет равно 127.0.0.1:3000
let url = new URL('http://' + window.location.host)
$('#Addworker').on('submit', function(e){
e.preventDefault();
let login = $('#login').val();
let password = $('#password').val();
var data = {"do": "AddWorker",'login': login, 'password': password};
fetch(`/workers`, {
method: 'POST',
contentType: "application/json",
body: JSON.stringify(data)
})
.then(function(response){
return response.json()
})
.then(function (res) {
ObrabotkaAddWorker(res)
})
})
class Get {
constructor(entity) {
this.entity = entity;
this.query = []
}
addFilter(field, type, val) {
this.query.push(`filter=${field}||${type}||${val}`)
return this
}
addOrder(field, direction) {
this.query.push(`order=${field}||${direction}`)
return this
}
async send() {
const queryString = this.query.length ? '?params|' + this.query.join('&') : '';
return await console.log(this.entity + queryString)
// вместо console.log к примеру axios
}
}
const books = new Get('books').send()
// books
const audio = new Get('audio').addFilter('id', 'eq', 1).send()
//audio?params|filter=id||eq||1
const images = new Get('images').addFilter('name', 'like', 'cat').addOrder('createdAt', 'DESC').send()
// "images?params|filter=name||like||cat&order=createdAt||DESC"
</body>
var valuey = valuey.valuey.options[0];
var valuex = valuex.valuex.options[0];
Здесь неверное обращение valuex.options[0];<form action="" autoComplete="off">
<input type="text" name="phone">
</form>