Loading...
angels82 avatar angels82 32 Точки

4. Book Generator - Exercises: jQuery, DOM and Events

Здравейте,

Може ли някой да сподели решение на задачата. Видях, че много хора са я решили. Аз успях да я подкарам в браузъра, но без да използвам IIFE и след като промених в HTML файла: от 

window.onload = function () {
    createBook("#wrapper", "Alice in Wonderland", "Lewis Carroll", 1111);
}

го промених на : 

window.onload = 
    createBook("#wrapper", "Alice in Wonderland", "Lewis Carroll", 1111);

 

Малко се обърквам от HINT-a, даден в условието на задачата: коя функция трябва да е външна и коя вътрешна. Ето ми го решението, което малко изкуствено го направих да работи в браузъра, но не мога да се ориентирам как да го накарам да работи в Judge:

function createBook(selector, title, author, isbn) {
    let id = 1;
    return function () {
        let text = '';
        let divid = 'book' + id;
        text +='<div id="' + divid + '" style="border: medium none;">';
        text += '<p class="title">' + title + '</p>';
        text += '<p class="author">' + author + '</p>';
        text += '<p class="isbn">' + isbn + '</p>';
        text += '<button id="select">Select</button>';
        text += '<button id="deselect">Deselect</button>';
        text += '</div>';
        id++;
        $(selector).html(text);

        let selectButton = $('#select');
        let deselectButton = $('button:contains("Deselect")');
        $('#select').click(function (event) {
            $('#'+divid).css("border", "2px solid blue")
        });
        $('#deselect').click(function (event) {
            $('#'+divid).css("border", "none")
        });
    }
}
1
JavaScript Advanced
fbinnzhivko avatar fbinnzhivko 1586 Точки

http://pastebin.com/hrKQux7N

40/100 със съвсем малка промяна.
Надявам се да съм помогнал.

0
25/10/2016 00:13:37
angels82 avatar angels82 32 Точки

Благодаря за помощта! А можеш ли да разбереш защо гърмят останалите тестове? Според мен грешката е при входни данни за повече от 1 книга, ноне разбирам къде е грешката. Благодаря предварително!

0
gadjov avatar gadjov 115 Точки

Ето 100/100 http://pastebin.com/HBSPXENv , само не разбирам защо без let createBook = пред функцията, не работи в браузъра?!

1
26/10/2016 17:14:41
Innos avatar Innos 419 Точки

Един пример който може да разясни малко как работят IIFE-тата е следният нека да погледнем едно IIFE:

(function someFunc(){
  return function nestedFunc(){console.log('something');}
}());

IIFE (Immediately Invoked Function Expression) е точно както името му подсказва израз - когато сложим нещо в скоби то става израз, иначе казано за интерпретатора това IIFE и следният израз се евалюират по еднакъв начин:

(10 + 5);

Ако разгледаме израза (10 + 5) нека видим какво става с него - първо се извършват операциите в скобите и получаваме числото 15, после не записваме 15 никъде и резултата от израза е изгубен. Същото става и с IIFE-то, името на външната функция няма никакво значение защото самата фунцкия ще живее само за живота на израза, името на вътрешната функция може да се запази, обаче трябва да отбележем че "return function" не е декларация на функция, а е връщане на параметър, съответно няма да съществува функция която да може да извикаме с nestedFunc(). Както със случая с (10 + 5) ако не запишем резултата от израза в някаква променлива няма как да разполагаме с него, защото функциите живеят само за живота на израза. Така че очевидният отговор е:

let resultFunc = (function someFunc(){
  return function nestedFunc(){console.log('something');}
}());

По този начин може да разполагаме с nestedFunc като я запишем в променливата resultFunc.

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