Bom dia. criei um rotina, para que o usuario escolha um item do banco de dados, filtre e some os dados seliecionados, porém só depois que clico no campo desp3 que soma
. alguem pode me ajudar? Vejam a rotina abaixo e a foto do site:
export function dropdown1_click(event) {//array com todos os inputs que precisam ser somados(se tiver //mais que 4, basta adicionar o id ao array) const inputs = ["#input2", "#input3", "#input4", "#input5" ,"#input6", "#input7"] $w.onReady(function () { //adiciona o evento onBlur em todos inputs inputs.forEach(input => { $w(input).onBlur(() => somarInputs()) }) }); //Soma o valor de todos os inputs function somarInputs () { const soma = inputs.reduce((total, input) => { return total += parseFloat($w(input).value) || 0 }, 0) $w('#input11').value = `${soma}` } //funcao de soma const funcaoCalculo1 = (total, item) => -(item.desp1) + total; $w.onReady(function () { //espera que os dados sejam carregados $w('#dataset1').onReady( async () => { //pega todos items do dataset const data = await $w('#dataset1').getItems(0, $w('#dataset1').getTotalCount()) //calcula o total const total = data.items.reduce(funcaoCalculo1, 0); //atulizado o valor total $w('#input2').value = total }); }); //funcao de soma const funcaoCalculo2 = (total, item) => -(item.desp2) + total; $w.onReady(function () { //espera que os dados sejam carregados $w('#dataset1').onReady( async () => { //pega todos items do dataset const data = await $w('#dataset1').getItems(0, $w('#dataset1').getTotalCount()) //calcula o total const total = data.items.reduce(funcaoCalculo2, 0); //atulizado o valor total $w('#input3').value = total }); }); //funcao de soma const funcaoCalculo3 = (total, item) => -(item.desp3) + total; $w.onReady(function () { //espera que os dados sejam carregados $w('#dataset1').onReady( async () => { //pega todos items do dataset const data = await $w('#dataset1').getItems(0, $w('#dataset1').getTotalCount()) //calcula o total const total = data.items.reduce(funcaoCalculo3, 0); //atulizado o valor total $w('#input4').value = total }); }); //funcao de soma const funcaoCalculo4 = (total, item) => -(item.desp4) + total; $w.onReady(function () { //espera que os dados sejam carregados $w('#dataset1').onReady( async () => { //pega todos items do dataset const data = await $w('#dataset1').getItems(0, $w('#dataset1').getTotalCount()) //calcula o total const total = data.items.reduce(funcaoCalculo4, 0); //atulizado o valor total $w('#input5').value = total }); }); //funcao de soma const funcaoCalculo5 = (total, item) => -(item.desp5) + total; $w.onReady(function () { //espera que os dados sejam carregados $w('#dataset1').onReady( async () => { //pega todos items do dataset const data = await $w('#dataset1').getItems(0, $w('#dataset1').getTotalCount()) //calcula o total const total = data.items.reduce(funcaoCalculo5, 0); //atulizado o valor total $w('#input6').value = total }); }); //funcao de soma const funcaoCalculo6 = (total, item) => -(item.desp6) + total; $w.onReady(function () { //espera que os dados sejam carregados $w('#dataset1').onReady( async () => { //pega todos items do dataset const data = await $w('#dataset1').getItems(0, $w('#dataset1').getTotalCount()) //calcula o total const total = data.items.reduce(funcaoCalculo6, 0); //atulizado o valor total $w('#input7').value = total }); }); //Add your code for this event here: }
funiconou. mais uma vez multo obrigado.
Oi @almirferrer.
Primeiro ponto, é permitido apenas um $w.onReady por página, e ele não pode ser colocado dentro do evento do dropdown. Melhorei seu código porém pode conter erros, pois não consigo testar.
OBS: troque o evento do dropdown para change no lugar de click.
const inputs = [ "#input2", "#input3", "#input4", "#input5", "#input6", "#input7", ]; function somarInputs() { const soma = inputs.reduce((total, input) => { return (total += parseFloat($w(input).value) || 0); }, 0); $w("#input11").value = `${soma}`; } $w.onReady(function () { //adiciona o evento onBlur em todos inputs inputs.forEach((input) => { $w(input).onBlur(() => somarInputs()); }); }); const somaDesp = (key) => { return (total, item) => -item[key] + total }; function updateDespInput(desp, input, data) { const total = data.items.reduce(somaDesp(desp), 0); $w(input).value = total } export async function dropdown1_change(event) { /* aqui não apliquei nenhum filtro ao data set caso aplique um filtro uso o await na frente da função: await $w("#dataset1").setFilter( wixData.filter().eq("placa", $w('#dropdown1').value)); */ const data = await $w('#dataset1').getItems(0, $w('#dataset1').getTotalCount()) updateDespInput('desp1', '#input2', data); updateDespInput('desp2', '#input3', data); updateDespInput('desp3', '#input4', data); updateDespInput('desp4', '#input5', data); updateDespInput('desp5', '#input6', data); updateDespInput('desp6', '#input7', data); }