<button>click me</button>
button {
background: green;
}
@keyframes xxx {
0% { background-color: red; }
100% { background-color: transparent; }
}
.xxx {
animation: xxx 2s;
}
$('button').on({
click() {
$(this).addClass('xxx');
},
animationend() {
$(this).removeClass('xxx');
},
});
for (var i = 0; i < 10; i++) {
setTimeout(function() {
alert(+this);
}.bind(i), 100);
}
for (let i = 0; i < 10; i++) {
setTimeout(function() {
alert(i);
}, 100);
}
for (var i = 0; i < 10; i++) {
setTimeout(alert, 100, i);
}
for (var i = 0; i < 10; i++) {
setTimeout(new Function(`alert(${i})`), 100);
}
for (var i = 0; i < 10; i++) {
setTimeout(function() {
alert(i++);
}, 100);
}
i = 0;
$('body').on('click', function(e) {
var
$target = $(e.target),
isMark = $target.hasClass('mark'),
isActive = $target.hasClass('active');
if (!isMark || !isActive) {
$('.mark.active +.tooltip').fadeOut();
$('.mark.active').removeClass('active');
}
if (isMark && !isActive) {
$target.addClass('active');
$('.mark.active +.tooltip').fadeIn();
}
});
он не работает
<div data-num="2350" data-step="5" class="number">0</div>
$(window).scroll(function() {
var $win = $(window);
if ($('#counter').offset().top < $win.scrollTop() + 200) {
$win.off('scroll');
$('.number').addClass('viz').each(function() {
var
i = 0,
num = +this.dataset.num,
timeStep = 1000 / num,
valStep = +this.dataset.step || 1,
interval = setInterval(function($el) {
if ((i += valStep) >= num) {
clearInterval(interval);
}
$el.html(Math.min(i, num));
}, timeStep, $(this));
});
}
});
var steps = 100;
$(window).scroll(function() {
var $win = $(window);
if ($('#counter').offset().top < $win.scrollTop() + 200) {
$win.off('scroll');
$('.number').addClass('viz').each(function() {
var
i = 0,
num = +this.dataset.num,
valStep = num / steps,
interval = setInterval(function($el) {
if ((i += valStep) >= num) {
clearInterval(interval);
}
$el.html(Math.floor(Math.min(i, num)));
}, 20, $(this));
});
}
});
querySelectorAll
возвращает коллекцию элементов, никакого addEventListener
у неё нет - его надо вызывать отдельно у каждого элемента.e.classList
? e
- это объект события, а не элемент DOM-дерева.const elems = document.querySelectorAll('nav#menu_3 > ul > li');
elems.forEach(n => n.addEventListener('mouseover', onMouseover));
function onMouseover() {
elems.forEach(n => {
n.classList.toggle('zoomed', this === n);
n.classList.toggle('nozoomed', this !== n);
});
}
<a href="#" class="menu-trigger" data-list="#menu">Menu</a>
<a href="#" class="menu-trigger" data-list="#contacts">Contacts</a>
<ul id="menu" class="list">...</ul>
<ul id="contacts" class="list">...</ul>
$('.menu-trigger').click(function() {
var list = this.dataset.list;
$(this).parent().find('.list').not(list).slideUp(0);
$(list).slideToggle(500);
});
$(window).resize(function() {
if ($(window).width() > 500) {
$('.list').removeAttr('style');
}
});
$('селектор кнопки').click(function() {
$('селектор-элементов')
.not('.класс')
.slice(0, количествоЭлементовКоторымНадоДобавитьКласс)
.addClass('класс');
});
const items = [...document.querySelectorAll('селектор элементов')];
document.querySelector('селектор кнопки').addEventListener('click', () => {
items
.splice(0, количествоЭлементовКоторымНадоДобавитьКласс)
.forEach(n => n.classList.add('класс'));
});
пытался получить так:
console.log($('.wall_post_text', this)).innerText;
Но пишет undefined
.innerText
надо внутри внешних скобок было разместить, а так вы у результата вызова console.log
хотите свойство прочитать (и получаете вы никакой не undefined
, а ошибку "cannot read properties of undefined").innerText
надо получать у DOM-элемента, а не jquery объекта. Ну или замените обращение к свойству на вызов метода.$('.wall_post_text', this)[0].innerText
// или
$('.wall_post_text', this).get(0).innerText
// или
$('.wall_post_text', this).prop('innerText')
// или
$('.wall_post_text', this).eq(0).text()
// или
$('.wall_post_text:eq(0)', this).text()
// или, если элемент .wall_post_text внутри this один
$('.wall_post_text', this).text()
return json_encode($result)
наверное должно быть что-то вроде echo json_encode($result)
. Также непонятно, почему никак не обрабатывается ситуация, когда name и email отсутствуют.header('Content-Type: application/json');
. Всё-таки json возвращаете.?>
тоже не помешает - чтобы случайно не добавлять пробелы/пустые строки в ответ.dataType: "html"
было бы неплохо заменить на dataType: "json"
- по получении ответа не придётся вызывать parseJSON, response будет объектом. в чем тут логика?
(function() {
'use strict';
var func = function() { console.log(this); };
func.call(null); // выведет null
})();
var
path = 'aaa.bbb.ccc.ddd',
data = {
aaa: {
bbb: {
ccc: {
ddd: 'Hello!!'
}
}
}
};
console.log(path.split('.').reduce((p, c) => p[c], data)); // Hello!!
if (i > 10) {
history.shift();
}
localStorage.removeItem(history[0])
, то это не удаление нулевого элемента массива, хранящегося в localStorage, а удаление из localStorage свойства с именем, соответствующим значению нулевого элемента массива history.