При нажатии на svg, event.target присваивается конкретным элементам - картинка внутри svg, текст, фигура итд.
event.target.closest('svg')
Допустим я нашел нужный эл-т, и вижу в console.log нужный атрибут, но если вызвать его напрямую, возвращается undefined
card.getAttribute('stroke')
onClickFuagra = () => {
this.setState({
strokeFuagra: '...',
});
}
onClickFish = () => {
this.setState({
strokeFish: '...',
});
}
<Samy svgXML={fuagra} onClick={this.onClickFuagra}>
...
</Samy>
<Samy svgXML={fish} onClick={this.onClickFish}>
...
</Samy>
onClick = e => {
const svg = e.target.closest('svg');
this.setState({
[имя свойства зависит от svg, как определить по кому был клик - думайте сами]: '...',
});
}
<div className="banners" onClick={this.onClick}>
...
moment().add(1, 'months').date(10).unix()
onKeyDown = e => {
if (e.key === 'Tab') {
e.preventDefault();
const
input = e.target,
str = input.value,
currPos = input.selectionStart,
wordEnd = str.slice(currPos).search(/[^\w]/);
let pos = str.slice(currPos + wordEnd).search(/[^\s]/);
if (pos) {
pos += currPos + wordEnd;
}
if (pos === currPos) {
pos = 0;
}
input.setSelectionRange(pos, pos);
}
}
<input value={this.state.str} onKeyDown={this.onKeyDown} />
<div
*ngFor="let user of users"
[class]="active === user ? 'active' : ''"
(click)="active = user"
>
watch срабатывает тогда когда мне не надо
вотчер возвращает оба одинаковых значения
const random = arr => arr[Math.random() * arr.length | 0];
// одно значение
const randomName = random(arr_names);
// или сразу несколько
const randomNames = Array.from(
{ length: 5 },
random.bind(null, arr_names)
);
// работать можно не только с массивами, но и, например, со строками
const randomChar = random('abcdefg');
// и HTMLCollection тоже будет как надо обработана
const randomImage = random(document.images);
$('#text-column').prop('scrollHeight')
// или
$('#text-column').get(0).scrollHeight
// или
$('#text-column')[0].scrollHeight
$('.va-city-list').on('click', '.list-city', function() {
console.log($(this).data('city'));
});
$('.list-city').click(e => console.log($(e.target).attr('data-city')));
document.querySelector('.va-city-list').addEventListener('click', e => {
const { city } = e.target.dataset;
if (city) {
console.log(city);
}
});
const onClick = e => console.log(e.target.getAttribute('data-city'));
document.querySelectorAll('.list-city').forEach(n => n.addEventListener('click', onClick));
for (const n of document.getElementsByClassName('list-city')) {
n.onclick = onClick;
}
function onClick() {
console.log(this.attributes['data-city'].value);
}
const keyboard = [
'abcde123',
'fghij456',
'klmno789',
'pqrst.@0',
'uvwxyz_/',
].reduce((acc, [...row], iRow) => {
row.forEach((key, iCol) => acc[key] = [ iRow, iCol ]);
return acc;
}, {});
function tvRemote(word) {
let steps = word.length;
let prev = [ 0, 0 ];
for (const n of word) {
const curr = keyboard[n];
steps += Math.abs(prev[0] - curr[0]) + Math.abs(prev[1] - curr[1]);
prev = curr;
}
return steps;
}
Решение через фунцию-валидатор я видел, но мне оно не кажется оптимальным для объектов. По крайней мере в React это намного короче и наляднее.
Возможно во Vue есть аналог?
"react": "^16.4.0",
import React, { Component, PropTypes } from 'react';
Note:React.PropTypes
has moved into a different package since React v15.5. Please use the prop-types library instead.
.close
- наоборот, закрыть.const modal = document.querySelector('.modal');
const close = modal.querySelector('.close');
document.addEventListener('click', function(e) {
if (e.target === modal || e.target === close) {
modal.style.display = 'none';
}
if (e.target.tagName === 'BUTTON') {
modal.style.display = 'block';
}
});