const debounce = (callback, wait) => {
let timeoutId = null;
return (...args) => {
window.clearTimeout(timeoutId); // повторый вызов отменит предыдущий
timeoutId = window.setTimeout(() => {
callback(...args);
}, wait); // и запустит новый
};
}
const runDebouncedBigArrayOnInputEnds = debounce(
(event) => {
// запускает обработку большого массива в цикле
},
250 // сколько ждать завершения ввода
);
document.getElementById('#myTxtField').addEventListener('input', runDebouncedBigArrayOnInputEnds );
"X-CSRFToken"
неправильный заголовок.let csrftoken = getCookie('XSRF-TOKEN');
получает значение. jQuery('#dtp').datetimepicker({
format:'d.m.Y H:i',
scrollInput:false, // не выбирать значение при скроле
timepickerScrollbar:false // скрыть полоску скрола
})
<form method="post" action="App1.xyz://authorize"> ...
При клике на кнопку не могу получить текст с инпута в "count"
// вместо $('#users_table tbody').on('click' ...
table.on("click", "button", function (e) {
let data = table.row(e.target.closest("tr")).data();
console.log(data);
let cart_count = $(e.target.closest("tr")).find("input.number-text").val();
console.log(cart_count);
});
var table = null;
$(document).ready(function () {
table = $("#users_table").DataTable({
data: [[29, "Andrew", "Ruby", "9300000", "1", "btn"]],
columns: [
{ title: "id" },
{ title: "name" },
{ title: "code" },
{ title: "description" },
// вместо createdRow использовать renderer и изменять table.data сразу при изменении значения поля
{ title: "count", render: function (data, type, row, meta) {
return "<input type=\"text\" value="+row[4]+" onchange=\" table.cell("+meta["row"]+", 4).data(this.value)\">";
}},
{ title: "action" }
],
columnDefs: [
{
data: null,
defaultContent: "<button>Click!</button>",
targets: -1
}
],
});
table.on("click", "button", function (e) {
// тогда нужное вам значение уже есть тут
let data = table.row(e.target.closest("tr")).data();
console.log(data);
});
});
function createTable(i, data){
const div = document.createElement("div");
div.classList.add('data' + [i]);
document.body.append(div); // тут!
div.innerHTML = i + " <pre>" + JSON.stringify(data,null,' ' ) + "</pre>";
}
const t= document.createElement('table')
function addRow(table, index, json){
const row=document.createElement('tr')
const cell=document.createElement('td')
cell.innerHTML= i + " <pre>" + JSON.stringify(json,null,' ' ) + "</pre>"
row.appendChild(cell)
table.appendChild(row)
}
// ваши реквесты
for(let i=0; i<count; i++) {
...
addRow(1,data)
...
}
<table id="example" width="70%" style=" white-space: pre-wrap;">
<thead>
<tr><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th><th>6</th></tr>
</thead>
<!-- ... -->
$('#example').DataTable( {
autoWidth: false,
columnDefs: [
{ targets: '_all', "width": "1%" }
]
} );
style="overflow-wrap: anywhere;"
eсли в датасете есть слишком_длинные_значения_которые_точно_не_влезут в конечную ширину колонки . function aggregator (a, c, maxChars){
if (a[0].textContent.length > maxChars) {
a[1].appendChild(c)
} else if (c.children?.length > 0) {
const agg = spanParse(c, maxChars - a[0].textContent.length);
a[0].appendChild(agg[0])
if (agg[1]) {
a[1].appendChild(agg[1])
}
} else {
a[0].appendChild(c)
}
return a;
}
function spanParse(rootSpan, maxChars) {
const aggregated = [document.createElement('span'), document.createElement('span')]
return [...rootSpan.childNodes].reduce((a, c) => aggregator(a, c, maxChars), aggregated)
}
function split(elem) {
const r = spanParse(elem, elem.textContent.length / 2)
console.log(r[0].textContent.length, r[1].textContent.length)
}
split(document.getElementByTag('span'));
const readAsDataURL = (image) => {
const fr= new FileReader();
return new Promise((resolve, reject) => {
fr.onerror = () => { fr.abort(); reject(new Error( 'err msg' )); };
fr.onload = () => { resolve(fr.result); };
fr.readAsDataURL(image)
});
};
[...selectedImages].map( async (image, index) => {
const data = await readAsDataURL(image)
return (<img src={data} alt="" key={`previewImage:${index}`} />
})
var ordered = Object.entries({
4889: "Скрипт ", 4914: "Ааа", 11994: "Сервис", 12344: "иииии", 12417: "Тестовая", 12432: "ТТТ ", 12446: "Ма"
}).sort(
(a,b)=>a[1]<b[1]?-1:a[1]>b[1]?1:0
).reduce(
(a,c)=>{a[`'${c[0]}'`]=c[1]; return a},
{}
);
Object.getOwnPropertyNames(ordered)
// ["'4914'", "'12446'", "'11994'", "'4889'", "'12432'", "'12417'", "'12344'"]
// range.setValues(arr);
arr.forEach(
(val,idx) => {
if (val!=='') range.getCell(1, idx+1).setValue(val)
}
);