$.fn.trackCoords = function(options) {
return this.each(function() {
const $element = $(this);
// ...
});
};
$element.mouseover(function(e) {
if (this !== e.target) {
// чужое событие - не интересно, не обрабатываем
return;
}
// ...
});
<input name="firstname" ...
.const formData = new FormData(formElement);
после e.preventDefault();
.const formData = new FormData(e.target);
.const formData = new FormData(this);
. Поясните это поведение
g
- то есть, ищутся все совпадения с шаблоном, а не только первое. Вы вызываете метод test - совпадение найдено, круто. Вызываете снова - поиск начинается не с начала, а с того места, где он был окончен в прошлый раз. Разумеется, в этот раз ничего не найдено. Вызываете test в третий раз - снова всё хорошо, потому что в прошлый раз совпадения кончились, поиск снова выполняется с начала строки.посоветуйте как вывернуть так, чтобы нормально отрабатывало
g
.hyper.lastIndex = 0;
. Разумеется, этот вариант является говнокодом. const select = document.querySelector('.table__select');
// или
const [ select ] = document.getElementsByClassName('table__select');
select.innerHTML = arr.map(n => `<option>${n}</option>`).join('');
// или
select.append(...arr.map(n => new Option(n)));
// или
for (const n of arr) {
select.appendChild(document.createElement('option'));
select.lastChild.text = n;
}
// или
for (let i = 0; i < arr.length; i++) {
const option = document.createElement('option');
option.textContent = arr[i];
select.insertAdjacentElement('beforeend', option);
}
// или
(function next(i) {
if (i < arr.length) {
const option = document.createElement('option');
option.innerText = arr[i];
select.insertBefore(option, null);
next(i + 1);
}
})(0);
const arr = [
[ 2, 7, 2 ],
[ 2, 5, 4 ],
[ 2, 1, 5 ],
[ 3, 1, 2 ],
];
const [ val, iRow, iCol ] = arr
.map((n, i) => n.reduce((min, m, j) => min[0] <= m ? min : [ m, i, j ], [ Infinity, -1 ]))
.reduce((min, n) => min[0] <= n[0] ? min : n);
const arr = [
[ 2, 7, 2, [ 5, [ 4, [ 3 ], 2 ] ] ],
[ 2, 5, [ 2, 6, 5, 2 ], 4 ],
[ 2, 1, [ [ [ 9, 0, 1 ], [ [ [ 1 ] ] ], -1 ] ], 5 ],
[ 3, 1, 2 ],
];
const minElemWithIndex = arr =>
arr.reduce((min, n, i) => {
const m = n instanceof Array
? minElemWithIndex(n)
: [ n, [] ];
m[1].unshift(i);
return m[0] < min[0] ? m : min;
}, [ Infinity, [] ]);
const [ val, indices ] = minElemWithIndex(arr);
$.ajax({
type: 'POST',
dataType: 'json',
url: 'https://api.novaposhta.ua/v2.0/json/',
data: JSON.stringify({
modelName: 'Address',
calledMethod: 'searchSettlements',
methodProperties: {
CityName: 'ки',
Limit: 555
},
apiKey: 'f11a8e14401ddcf710f7195b4ebe358c'
}),
headers: {
'Content-Type': 'application/json'
},
xhrFields: {
withCredentials: false
},
success: function(texts) {
console.log(texts);
},
});
onChange(data) {
$('input[name="sum"]').val(data.from);
}
И как поступить, если слайдера например два.
onChange(data) {
data.input
.closest('селектор блоков со слайдерами')
.find('селектор инпутов, в которые надо копировать значения')
.val(data.from);
}
.wrap
нет класса done
, так что результат вызова $('.wrap.done')
окажется пустым.$(document).on('click', '.wrap.done', function() {
$('.form, .wrap').removeClass('done');
});
done
элемент .wrap
не виден, кликать некуда, так что неважно, есть класс или нет - можно цеплять обработчик клика просто к .wrap
. .one:hover + .two,
.two:hover {
/* показываем элемент .two */
Вообще класс нужно добавлять.
.two
тот же обработчик ховера, что и к .one
:$('.one, .two').hover(function() {
$('.two').toggleClass('show');
});
function pasGen(chars, length) {
let prev = null;
return Array
.from({ length }, () => {
const i = Math.random() * chars.length | 0;
return chars[prev = (i + (i === prev)) % chars.length];
})
.join('');
}
const el = document.querySelector('.fab-button');
const key = 'ripple';
const val = 'true';
el.dataset[key] = val;
// или
el.setAttribute(`data-${key}`, val);
// или
const attr = document.createAttribute('data-' + key);
attr.value = val;
el.attributes.setNamedItem(attr);
$('.mysubmit').prop('disabled', arr.indexOf(str) !== -1);
$('.mysubmit').prop('disabled', arr.some(n => str.indexOf(n) !== -1));
const childSelector = 'img';
const className = 'myclass';
$(`.${className}:not(:has(> ${childSelector}))`).removeClass(className);
document.querySelectorAll(`.${className}`).forEach(n => {
n.classList.toggle(className, !!n.querySelector(`:scope > ${childSelector}`));
});
const elems = document.getElementsByClassName(className);
for (let i = elems.length; i--;) {
if (!Array.prototype.some.call(elems[i].children, n => n.matches(childSelector))) {
elems[i].classList.remove(className);
}
}
reader.onload = function(e) {
console.log(this.result);
};
reader.readAsText(file);