Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

PreslavaJeleva avatar PreslavaJeleva 8 Точки

Furniture Store - JS Advanced Final Retake Exam - 12 August 2021

Здравейте!

Може ли малко помощ със следната задача:

https://judge.softuni.org/Contests/Practice/Index/3089#0

 

Решението:

https://pastebin.com/9r0Z8geK

В браузъра работи както трябва, но един тест не минава  - получавам 88 точки.

Благодаря!

 

Тагове:
0
JavaScript Advanced
PreslavaJeleva avatar PreslavaJeleva 8 Точки

Намерих грешката  - The current furniture must be removed from the row in the table

https://pastebin.com/YWyqJeGS

 

0
Axiomatik avatar Axiomatik 2422 Точки

88/100 error usually triggered when there is a problem with the "More Info"/"Less Info" functionality =>

When the "More Info" button is clicked, change button text from "More Info" to "Less Info" and style display of "class = hide" from "none " to "contents". The second <td> must have attribute colspan with value 3. When click "Less Info" button is clicked, change button text from "Less Info" to "More Info" and style from "contents " to "none".

;-)

Demo code:

function solve() {
    //TO DO
    const form = document.querySelector('form');
    let [modelField, yearField, priceField] = Array.from(form.querySelectorAll('input'));
    let descriptionField = form.querySelector('textarea');
    const addBtn = document.getElementById('add');
    const table = document.getElementById('furniture-list');
    const totalMoney = document.querySelector('tfoot td[class="total-price"]');

    addBtn.addEventListener('click', addFurniture);

    function addFurniture(event) {
        event.preventDefault();

        const year = Number(yearField.value.trim());
        const price = Number(priceField.value.trim());
        const model = modelField.value.trim();
        const description = descriptionField.value.trim();
        const checkPositiveNumbers = year > 0 && price > 0;
        const checkStringFields = model !== '' && description !== '';

        if (!checkPositiveNumbers || !checkStringFields) {
            return;
        }

        const moreBtn = e('button', { class: 'moreBtn' }, 'More Info');
        const buyBtn = e('button', { class: 'buyBtn' }, 'Buy it');

        moreBtn.addEventListener('click', (event) => moreInfo(event, firstRow, secondRow));
        buyBtn.addEventListener('click', () => buyItem(firstRow, secondRow, price, totalMoney));

        const firstRow =
            e('tr', { class: 'info' },
                e('td', {}, model),
                e('td', {}, price.toFixed(2)),
                e('td', {},
                    moreBtn,
                    buyBtn,
                ),
            );

        const secondRow =
            e('tr', { class: 'hide' },
                e('td', {}, `Year: ${year}`),
                e('td', { colspan: '3' }, `Description: ${description}`),
            );

        // console.log(checkNumbersFields, checkStringFields);

        table.appendChild(firstRow);
        table.appendChild(secondRow);

        modelField.value = '';
        yearField.value = '';
        priceField.value = '';
        descriptionField.value = '';
    }

    function moreInfo(event, firstRow, secondRow) {
        event.target.textContent = event.target.textContent === 'More Info'
            ? 'Less Info'
            : 'More Info';

        secondRow.style.display = secondRow.style.display === 'contents'
            ? 'none'
            : 'contents';
    }

    function buyItem(firstRow, secondRow, price, totalMoney) {
        let currentTotal = Number(totalMoney.textContent);
        currentTotal += price;
        totalMoney.textContent = currentTotal.toFixed(2);

        firstRow.remove();
        secondRow.remove();
    }

    function e(type, attr, ...content) {
        const element = document.createElement(type);

        for (let prop in attr) {
            // element[prop] = attr[prop];
            // console.log(attr[prop], prop);
            element.setAttribute(prop, attr[prop]);
        }

        for (let item of content) {
            if (typeof item === 'string' || typeof item === 'number') {
                item = document.createTextNode(item);
            }
            element.appendChild(item);
        }

        return element;
    }
}

 

0
23/06/2022 09:20:16
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.