Loading...
Devilchild656 avatar Devilchild656 48 Точки

[Homework] JS Apps - jQuery-Overview

Откривам темата за да може да споделяме тук решенията си от домашното.

jQuery Overview

 

Ето няколко и от моите решения за домашното.

  1. Element-Insertion

  2. Background-Color-Switch

  3. Table-Generator

  4. SlideShow - Има няколко бъга за оправяне. Но като за първи път ми се струва добре.

 

 

12
JavaScript Applications 10/12/2014 00:38:27
ZvetanIG avatar ZvetanIG 907 Точки

Здравейте, 

доста от вас са наблегнали на  css  и html. Аз реших всичко да направя използвайки jQuery.

Забелязах, че в много от решенията не се изнася CSS и javaScript в отделни файлове извън HTML, което не е ОК. Много ми се искаше да видя решение с JavaScript OOP, но уви не попаднах на такова.

Ето и моето домашно.

Background Color Switch - Demo - Code

Table Generator - Demo - Code

Slideshow - Demo - Code

 

2
22/11/2014 15:27:54
Matrix avatar Matrix 1092 Точки

"CSS и javaScript в отделни файлове извън HTML, което не е ОК"

Много добре знаем, че от гледна точка на "добрите практики" не е ок, но за целите на едното елементарно домашно е хипер удобно всичко да ти е в един файл, без да се ровиш излишно из файлчета ;)

1
24/11/2014 14:45:58
ZvetanIG avatar ZvetanIG 907 Точки

Не съм на това мнение. Според мен добрите практики трябва са се спазват винаги. 

Примера, който ще дам може би не е най-удачния, но престави си едно издателство, което издава голяма книга и малка книга.  Това значили, че качеството на малката книга трябва да е по-лошо?

2
Matrix avatar Matrix 1092 Точки

Аз пък съм на мнение, че в случая с едното домашно, в което има някоко реда HTML, три реда CSS и 20-тина реда JS, ако човек тръгне да спазва дословно "добрите практики" се получава така, че все едно е тръгнал да "гърми комара с оръдие" (Конфуций)...

"Според мен добрите практики трябва са се спазват винаги."

Така е! Затова и се наричат "добри практики". Но пък според мен, човек не трябва винаги да върши нещо, просто защото така повелява канона или така трябва (един вид на сляпо), а да вниква във всяка една ситуация, да се нагажда според случая и да преценява, кое е най-оптималното и подходящо. А именно, в случая не става дума за обемен проект, в който разделянето на кода спрямо "добрите практики" би било ключово и много важно в много, много аспекти, а говорим за задачки от по няколко реда... То само времето, човек да обособи всичко в отделни фалове и да прескача между тях ще му отнеме излишно време, какво остава, ако иска да го шерне или после пък като трябва да се проверява, вместо човек да хвърви един поглед и сичко да му стане ясно веднага, ще трябва да отваря един път css файл, втори път js файл и тн и тн...

Нито кодът е обемен, че да се изгуби човек защото не са спазени "добрите практики", нито тапърва трябва да се упражняваме в тях или да убеждаваме в тяхната полезност, Ниво 2 сме все пак...Аз поне лично не бих си позволил да намаля оценката на някое домашно, защото нещата са в един файл...Да, бих го посочил в коментара си, за всеки случай, но ми е пределно ясно, че всеки един колега от Ниво 2 е наясно с "добрите практики" и ползата от тяхното спазване при работа... В случая с тези домашни, от тях просто няма реална полза, защото кодът е от по няколко реда.

 

"Примера, който ще дам може би не е най-удачния, но престави си едно издателство, което издава голяма книга и малка книга.  Това значили, че качеството на малката книга трябва да е по-лошо?"

Ами зависи за какво "качество" говориш...Ако говориш за качеството на печата, качество на хартията, гланца на корицата, мастилата...? Или за "качеството" на оформлението на книгата - примерно по-малката книга да е оформена по-лошо, да кажем корицата й е сложена някъде в средата, или главите в нея да са разбъркани и да започва самата книга от 3та глава? Ако това имаш в предвид, тук не става дума кодът от домашното, който да е събран накуп в един HTML да бъде с кофти качество, или пък някой като отваря style таг в него да буха java script кода си и да прави мазаляк навсякъде....!!!

Принципно за печатниците няма значение книгата "голяма" или "малка" е, а е важно количеството на тиража. "Малката" книга може да се изпечата в тираж 50 000, а "голямата" - в 50. Понеже даваш примера точно с издателство, което печата книги. Като човек, който е работил дълги години в печатни медии, ще ти кажа, че ако имаш една "голяма" книга и една "малка" книга, ако "малката" книга е в малък тираж, печатницата дори няма да пусне да загрява "голямата" машина, на която се печатат "големите" книги и поръчки, тъй като това за тях е като да "гърмиш комара с оръдие" и не им е изгодно нито като време, нито като консумативи за машината... Просто ще пуснат "малката" книга на "по-малката" машина, за да си спестят време и ресурси, без това да отнеме от качеството й.

1
25/11/2014 11:41:18
milen8204 avatar milen8204 296 Точки

Ето и моето домашно. Ако иска някой да го нахейти, аз съм насреща laughing

1
borislavml avatar borislavml 368 Точки

Включвам се и аз преди да е изтекъл срока за предаване.Много се заиграх, два дни гласих html и css. Бях забравил колко е досадно.

1. Elelment-insertion(background-color-switch) - DEMOКОД - Реших да ги направя двете задачи в едно уж за по-интересно, което ми коства доста главоболия. Как да хващаме евенти върху динамично генерирани дом елементи!?  Малко на магия заработи и ми се повтаря кода на места, но не успях да стигна до по-добро решение. Добавят се елементи към списъка с опция да им сложиш клас. и после съответно сменяш на избран клас цвета. Заиграх се с noty jQery plugin-a, който Наков показа и мисля, че успях да хвана всички изключения- нов айтъм без име, оцветяване на несъществуваш клас, непопълнен клас и нотификейшъни при съксес. Много як плъг ин вместо грозните алърти.

2. Table-Generator - ДЕМО - КОД - и аз не успях да излъжа Chrome да ми зареди JSON-a локално, а Firefox ми пищеше, че не е форамтиран коректно(при условие, че разбира се беше). Накрая се отказах и аз си го хардкоднах в script файла. Интересен jQuery метод открих тук one. За клик евенти да се изпълняватт само един път при пърия клик. Не мисля, че е правилно да се генерира n-пъти таблицата с едни и същи данни при n-клика, или пък съответно да събмитваш 100 пъти при 100 клика. laughing

3.Slide-show - ДЕМО - КОД - на 80% си преписах кода от тук, но просто нямах никаква идея как да го направя без помощ. Добавих си няколко неща и промених други. А в интернет е бол с free slideshow plugins, така че един ден ако някой му се наложи да пише слайдшоу трябва да е слабоумен да седне да го прави сам от нулата. Поне се запознах с идеята как се случват всъщност нещата .smile

Много ме озадачи различното поведение на jQuery при клик върхи button и input type=button. В различни ситуации един път лови клик а друг път не. Или пък го хваща, изпълнява си фукнцията и ми зачиства всичко генерирано динамично по дом-а от друг евент преди това. Ебаси...  взе ми здравето на първте две задачи, докато нацеля какви са му аджаба  хтмл-таг  предпочитанията за различните евенти. И никъде не успях да намеря дори тема по този "проблем". Някой има ли идея защо прави такива мизерии?

2
22/11/2014 18:19:45
ttitto avatar ttitto 1153 Точки

Зачистването се получава, защото <button> има type = submit по подразбиране и при натискане автоматично ти събмитва данните от формуляра към посоченото в action = "...". Ако много държиш да ползваш <button> трябва да му смениш типа: <button type = 'button' >.... или да ползваш <input type = 'button'

На втора задача не разбрах какво имаш предвид "да зареди JSONа локално". JSON -ът е форматиран правилно, само че трябва да се изтрият външният комплект кавички от док-файла. При мен вмъкването на този JSON, без редакции, в инпут текстово поле се разчита без проблем.

0
22/11/2014 18:31:51
borislavml avatar borislavml 368 Точки

Аха схванах идеята за бутона. Наистина като  направи събмит е логично да ми презареди страницата и да зачисти промените. За втора задача локално имам в предвит да си сложа JSON-а в е идин файл data.json и ot там да си го пaрсна с jQuery. Chrome реве, че това е секюрити проблем(да достъпвам данни отдалечено, щото горкия от къде да знае че съм си на мойта машина) и ми иска authentication какъвто аз няма как да направя. За firefox достъпа до файла не е секюрити проблем и го позволява, но не харесва формата. Пробвах какво ли не, то какво има и да се пробва де. Формата за json си е един и е елементарен. махам външните кавички и... същата история. Ще споделиш ли решение как си го преборил :)

0
ttitto avatar ttitto 1153 Точки

Ето го решението ми: нищо особено. Вмъквам зачистения от външните кавички JSON в едно инпут текст поле, с присвоено действие при излизане от полето. след това обхождам с два вложени each().

1
Reath avatar Reath 188 Точки

Ето го и мойто домашно - GitHub

Доста се заиграх с 4та задача със слайдъра и мисля, че се получи много добре (намерих още едно място, на което може да използвам моите любими Regular Expressions :D ). За останалите взаимствах някои неща от тук, за което благодаря на колегите!

0
22/11/2014 23:08:04
Dekameron avatar Dekameron 481 Точки

Здравейте колеги :)

Бих искал да споделя решението си на четвърта задача - SlideShow. Останалите са лесни и не вярвам някой да се е затруднил с тях, пък и доста от колегите вече са показали решенията си. Използвах познатите ни prototype и IIFE за да се достигне функциолнаста на текущи код. Дано да някой съм полезен. Кратко и ясно (надявам се).

SlideShow.html

SlideShow.css

SlideShow.js

0
presian avatar presian 223 Точки

Хора дайте малко помощ -> Втората част от домашното защо на втората задача ако и двете 

messageBox.success('Success message.');

messageBox.error('Error message.');

са активни при изпълнението на първата функция се появява текста от втората т.е. ->'Error message.'

Ако се коментира едната другата работи коректно, какво ли не опитах, но не става да мине едната функция със собствения си текст и после другата пак с нейния си текст!

0
23/11/2014 09:52:06
a.polyanska avatar a.polyanska 107 Точки

Здравейте,

Ще използвам темата да попитам нещо по това домашно, макар и от следващ випуск :) Разгледах решенията тук, моето уж изглежда подобно, съвсем като истинско, само че, разбира се, не работи yell

Става дума за втората задача- change background color. Аз съм опитала не да допълвам директно примерния инпут ХТМЛ, а да добавя полетата чрез JQuery.

Ето джава-скрипта. Ще съм ви благодарна, ако ми посочите грешките. Благодаря!

0
infreezer avatar infreezer 15 Точки

Грешката ви е на 17 ред, не подавате променливата cls, a стринга 'cls'. По този начин се опитвате да селектирате 'cls', който не съществува в DOM дървото.

0
03/04/2015 01:01:20
a.polyanska avatar a.polyanska 107 Точки

Първо пробвах само с променливата cls, но не работи. Преработих го на стринг, за да указва, че се има предвид ".bird", т.е. класът "bird".

Така ли трябва да е:

        var cls = classInput.val();
        var color = colorInput.val();

         $('cls').css('background', color)

Защото така също не работи или пропускам още нещо?

0
infreezer avatar infreezer 15 Точки

cls = "." + cls;

$(cls).css('background', color), така работи. :)

0
03/04/2015 01:28:30
ph.kolarov avatar ph.kolarov 63 Точки

Здравейте, някой може ли да ми каже, защо това не работи?

var myItems = null;
$.getJSON("table.json",function(json){
myItems=json;

});
console.log(myItems);

Мога да логвам обектите през функцията, но самата функция не вижда нищо извън нея;
1
AleksandurSeferinkin avatar AleksandurSeferinkin 333 Точки

$.getJSON е функция, която прави асинхронна заявка и тя не блокира изпълнението на моментния код. Функцията, която подаваш като втори параметър на getJSON, е callback, който ще се изпълни едва след приемането на отговор от сървъра. Това отнема време и е невъзможно да приключи преди интерпретатора да е стигнал до console.log(myItems)

В такива случаи ще искаш да работиш с myItems само в callback-a. Всеки код, който зависи от тази заявка, трябва да бъде извикан от/в този callback.

Асинхронният код не е толкова приятен като синхронния. Затуй jQuery са направили това чудо Deferred.

PS: Има начин да правиш синхронни заявки точно с такива цели, но е силно препоръчително да не го правиш, защото може да предизвика зацепване на сайта.

PS: Най-добре си добави break point при myItems = json и console.log(myItems), за да видиш за какво иде реч.

http://fixingthesejquery.com/#slide42

2
06/04/2015 15:10:12
Filkolev avatar Filkolev 4482 Точки

Извинявам се предварително за глупавите въпроси, но някой може ли да обясни какво се иска в 1-ва и 5-та задача?

На 5-та тоя grid обикновена таблица ли е (просто wrap-ната в jQuery обект)? Изглежда като да трябва да екстенднем самото jQuery ако схващам правилно.

1-ва явно е толкова елементарна, че не я разбирам въобще. Нали има append() и prepend(), какво точно се очаква да напишем?

1
dim4o avatar dim4o 288 Точки

1-ва си мисля, че е точно това, което си мислиш. Поне аз така я направих. За 5-та си мисля, че трябва нещо от рода:

$.fn.grid = function () {

var addRow = function addRow() {
console.log('row added');
};
var addHeader = function addHeader() {
console.log('header added');
};

return {
addRow: addRow,
addHeader: addHeader
}
};

var table = $('#myGrid').grid();

table.addHeader();
table.addRow();

Разбира се функционалностите не трябва да са принтиране - това е само за демонстрация, че работи. Реално методите на обекта би трябвало да работят върху .this, което е нашата таблица.
1
06/04/2015 22:11:16
Filkolev avatar Filkolev 4482 Точки

Да, 5-та и аз така си я представях.

Обаче все още не ми е ясно на 1-ва като код какво се иска. Да си измислим някакви елементи и да ги сложим с двете функции ли? Защото условието е така написано, че излиза, че скрипта трябва да добавя тази фунцкионалност, а тя си я има наготово в библиотеката. Това ме обърква.

0
06/04/2015 22:12:52
dim4o avatar dim4o 288 Точки

Възможно е, но понеже е с 10 думи написано едва ли е задача за терминатори и сигурно се иска най-простото. Хубаво ще е да да чуем и други мения. Аз не се бях замислял до сега, че може да се иска нещо друго.

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