не уверен, что применяются :data-vv-as и :data-vv-delay аттрибуты
You can specify a delay to debounce the input event, a case scenario that you may want to wait for the user to stop typing then validate the field
сохранить доступ к el и binding
датасет дает нам возможность сохранять только примитивы
у меня нет способа передать из родителя в инстанс компонента описание процедуры валидации
хотелось бы иметь возможность каким-либо образом отменить передачу значения, не прошедшего валидацию наверх
get-age
- это не data-атрибут. Меняйте на data-age
.age_3_6
будет .age_3_6
, вместо age_7_10
будет .age_7_10
и т.д., ну а у элемента "все" будет data-age="*"
.const itemSelector = '.ped_holder .ped';
const buttonSelector = '.ages a';
const activeButtonClass = 'active';
const selectorAttr = 'age';
const $buttons = $(buttonSelector).click(function() {
const selector = $buttons
.removeClass(activeButtonClass)
.filter(this)
.addClass(activeButtonClass)
.data(selectorAttr);
$(itemSelector).hide().filter(selector).show();
});
// или, к чёрту jquery
const buttons = document.querySelectorAll(buttonSelector);
const items = document.querySelectorAll(itemSelector);
buttons.forEach(n => n.addEventListener('click', onClick));
function onClick({ target: t }) {
const selector = t.dataset[selectorAttr];
buttons.forEach(n => n.classList.toggle(activeButtonClass, n === t));
items.forEach(n => n.style.display = n.matches(selector) ? '' : 'none');
}
arr.sort((a, b) => {
a = a.split('.', 2);
b = b.split('.', 2);
return (a[1] - b[1]) || (a[0] - b[0]);
});
const sortedArr = arr
.map(n => n.split('.'))
.sort((a, b) => (a[1] - b[1]) || (a[0] - b[0]))
.map(n => n.join('.'));
передаю метод без аргумента onBlur={this.handleChange}
стоит мне изменить на onBlur={this.handleChange('title')}
onBlur={() => this.handleChange('title')}
. Или вместо передачи значения в качестве параметра добавляйте его элементу как атрибут, а в обработчике события считывайте:onBlur={this.handleChange} data-change-param="title"
handleChange = (e) => {
const changeParam = e.target.getAttribute('data-change-param');
...
+
вам в помощь, добавляйте сколько надо.// исправляем ваш код
$('.add-attr').on('click', function() {
const index = $('.radios').length + 1;
const $lastRow = $(this).closest('.container').find('.item').last();
const $newRow = $lastRow.clone(true).insertAfter($lastRow);
$newRow.find('input[type="radio"]').prop('name', 'name-' + index);
});
// или переписываем его без использования jquery
document.querySelector('.container').addEventListener('click', e => {
if (e.target.classList.contains('add-attr')) {
const row = e.currentTarget.firstElementChild.cloneNode(true);
const name = `name-${e.currentTarget.children.length + 1}`;
e.currentTarget.appendChild(row);
row.querySelectorAll('[type="radio"]').forEach(n => n.name = name);
}
});
const $row = $('.b-items').clone();
let ID = +$row.find('select').last().attr('id').split('-').pop();
function selectize($el) {
$el.selectize({
allowEmptyOption: true,
create: true,
});
}
selectize($('select'));
$('.btn-clone').on('click', function() {
selectize($row
.clone()
.insertBefore(this)
.find('select')
.attr('id', () => `select-${++ID}`)
);
});