{"id":2613,"date":"2026-03-30T08:33:48","date_gmt":"2026-03-30T05:33:48","guid":{"rendered":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/?page_id=2613"},"modified":"2026-04-20T08:10:56","modified_gmt":"2026-04-20T05:10:56","slug":"programare-web-javascript","status":"publish","type":"page","link":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/programare-web\/programare-web-javascript\/","title":{"rendered":"Programare Web: JavaScript"},"content":{"rendered":"<h2>Lectur\u0103 obligatorie<\/h2>\n<p>Lectura obligatorie \u00een vederea rezolv\u0103rii laboratorului de JavaScript: <a href=\"http:\/\/www.w3schools.com\/js\/default.asp\" target=\"_blank\" rel=\"noopener\">http:\/\/www.w3schools.com\/js\/default.asp<\/a>. Se vor parcurge toate sec\u021biunile din meniul din st\u00e2nga, cu excep\u021bia JS AJAX \u0219i JS jQuery.<\/p>\n<h2>Cerin\u021be de implementare<\/h2>\n<p>IMPORTANT: Cerin\u021bele de mai jos se vor rezolva obligatoriu toate:<\/p>\n<ul>\n<li>f\u0103r\u0103 utilizarea libr\u0103riilor externe (de exemplu, <code>jQuery<\/code>)<\/li>\n<li>f\u0103r\u0103 utilizarea selectorilor specifici jQuery (de tip <code>$<\/code>), chiar dac\u0103 ace\u0219tia sunt permi\u0219i de sintaxa JavaScript<\/li>\n<\/ul>\n<h2>1. Formulare \u0219i validare<\/h2>\n<p>Identifica\u021bi \u00een cadrul aplica\u021biei web dezvoltate minimum 3 pagini web, fiecare con\u021bin\u00e2nd c\u00e2te un formular pentru introducerea datelor. Dac\u0103 este necesar, ad\u0103uga\u021bi pagini \u0219i\/sau formulare noi aplica\u021biei. Formularele trebuie s\u0103 con\u021bin\u0103, \u00een total, minimum 20 de elemente variate, precum:<\/p>\n<ul>\n<li><code>input<\/code>-uri (<code>text<\/code>, <code>password<\/code>, <code>radio<\/code>, <code>checkbox<\/code>, <code>date<\/code>, <code>file<\/code>, etc.)<\/li>\n<li><code>textarea<\/code><\/li>\n<li><code>select<\/code> \u0219i <code>option<\/code><\/li>\n<\/ul>\n<p>Observa\u021bie: 20 de <code>option<\/code>-uri nu \u00eenseamn\u0103 respectarea cerin\u021bei de mai sus :).<\/p>\n<p>Se vor valida datele introduse de utilizator folosind JavaScript la submit-ul formularelor. Controalele completate incorect (de exemplu: v\u00e2rsta = -1 sau v\u00e2rsta = \u201eabc\u201d) vor fi eviden\u021biate vizual folosind CSS (de exemplu, contur ro\u0219u).<\/p>\n<h2>2. Dependen\u021be \u00eentre c\u00e2mpuri<\/h2>\n<p>Implementa\u021bi cel pu\u021bin 2 func\u021bionalit\u0103\u021bi \u00een care valoarea unui element de introducere a datelor depinde de alt element.<\/p>\n<p>Exemple:<\/p>\n<ul>\n<li>a) Un <code>input<\/code> de tip <code>text<\/code> pentru v\u00e2rst\u0103 care condi\u021bioneaz\u0103 valorile acceptate \u00eentr-un <code>input<\/code> de tip <code>date<\/code><\/li>\n<li>b) Dou\u0103 elemente de tip <code>select<\/code>:\n<ul>\n<li>primul con\u021bine, de exemplu, jude\u021bele din Rom\u00e2nia<\/li>\n<li>al doilea va fi populat dinamic \u00een func\u021bie de selec\u021bia din primul (localit\u0103\u021bi corespunz\u0103toare)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Datele vor fi definite \u00eentr-un fi\u0219ier JavaScript separat, sub form\u0103 de variabile sau structuri JSON.<\/p>\n<h2>3. Carousel (carusel)<\/h2>\n<p>Implementa\u021bi la nivelul aplica\u021biei dezvoltate un carousel care con\u021bine minimum 4 slide-uri, ce se deruleaz\u0103 automat la un interval de 3 secunde.<\/p>\n<p>Carouselul va fi definit printr-un tablou JavaScript care con\u021bine, pentru fiecare element:<\/p>\n<ul>\n<li>link<\/li>\n<li>textul asociat linkului<\/li>\n<li>imaginea de fundal<\/li>\n<\/ul>\n<p>Func\u021bionalitate:<\/p>\n<ul>\n<li>derulare automat\u0103 \u00eenainte<\/li>\n<li>navigare manual\u0103 \u00eenainte\/\u00eenapoi prin butoanele \u201e&lt;\u201d \u0219i \u201e&gt;\u201d, afi\u0219ate peste container<\/li>\n<\/ul>\n<p>Elementele carouselului trebuie s\u0103 fie relevante pentru tema aplica\u021biei (spre exemplu o aplica\u021bie care permite contractarea locurilor din c\u0103mine, va prezenta poze \u0219i facilit\u0103\u021bi dintr-un c\u0103min studen\u021besc).<\/p>\n<h2>4. Tabel \u0219i sortare<\/h2>\n<h3>a) Tabel clasic<\/h3>\n<p>Afi\u0219a\u021bi un set de date sub form\u0103 de tabel (minimum 3 coloane). Dac\u0103 nu exist\u0103 deja o astfel de func\u021bionalitate la nivelul aplica\u021biei dezolvate, crea\u021bi una. Datele vor proveni dintr-un array\/variabil\u0103 definit\u0103 \u00eentr-un fi\u0219ier JavaScript separat (la laboatoarele viitoare acestea vor fi preluate de pe backend).<\/p>\n<p>Implementa\u021bi:<\/p>\n<ul>\n<li>sortarea tabelului la click pe antet (header)<\/li>\n<li>indicarea vizual\u0103 a coloanei dup\u0103 care se face sortarea<\/li>\n<\/ul>\n<p>Celulele din antetul (header-ul) tabelului vor indica faptul c\u0103 la click pe ele se poate face sortarea, precum \u0219i faptul ca tabelul este sortat dup\u0103 o anumita coloan\u0103. Se va folosi CSS \u00een acest sens.<\/p>\n<h3>b) Tabel vertical<\/h3>\n<p>Implementa\u021bi aceea\u0219i func\u021bionalitate pentru o versiune \u201evertical\u0103\u201d a tabelului:<\/p>\n<ul>\n<li>prima coloan\u0103 reprezint\u0103 antetul<\/li>\n<li>la click pe o celul\u0103 din antet se vor sorta coloanele tabelului<\/li>\n<\/ul>\n<h2>5. Liste imbricate (colapsabile)<\/h2>\n<p>Implementa\u021bi la nivelul aplica\u021biei dezvoltate o func\u021bionalitate \u00een care afi\u0219a\u021bi anumite valori sub forma de list\u0103 (<code>ul<\/code> sau <code>ol<\/code>) ale c\u0103rei elemente (<code>li<\/code>) con\u021bin alte liste (<code>ul<\/code> sau <code>ol<\/code>). Implementa\u021bi un mecanism prin care:<\/p>\n<ul>\n<li>elementele listei principale pot fi expandate\/colapsate<\/li>\n<li>sublistele devin vizibile\/invizibile<\/li>\n<\/ul>\n<p>Se va utiliza CSS pentru:<\/p>\n<ul>\n<li>ascunderea sublistelor<\/li>\n<li>indicarea vizual\u0103 a elementelor expandabile (care se pot expanda)<\/li>\n<\/ul>\n<h2>6. Func\u021bionalitate original\u0103<\/h2>\n<p>Implementa\u021bi o func\u021bionalitate original\u0103 (\u201ecreativ\u0103\u201d), folosind JavaScript, \u00een func\u021bie de specificul aplica\u021biei voastre. Evaluarea acestei cerin\u021be va fi realizat\u0103 de cadrul didactic, \u00een func\u021bie de complexitatea implement\u0103rii.<\/p>\n<p>Reminder<\/p>\n<p>Cerin\u021bele de mai sus se vor rezolva obligatoriu:<\/p>\n<ul>\n<li>f\u0103r\u0103 utilizarea libr\u0103riilor externe (ex: <code>jQuery<\/code>)<\/li>\n<li>f\u0103r\u0103 utilizarea selectorilor specifici jQuery (de tip <code>$<\/code>)<\/li>\n<\/ul>\n<p>\u00cen cadrul orelor de laborator pot fi enun\u021bate \u0219i cerin\u021be suplimentare fa\u021b\u0103 de cele enumerate mai sus. Pentru fiecare \u00eentrebare adresat\u0103 de cadrul didactic referitoare la codul surs\u0103 al rezolv\u0103rii la care studentul nu \u0219tie s\u0103 r\u0103spund\u0103, se vor sc\u0103dea 2 puncte din nota laboratorului.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lectur\u0103 obligatorie Lectura obligatorie \u00een vederea rezolv\u0103rii laboratorului de JavaScript: http:\/\/www.w3schools.com\/js\/default.asp. Se vor parcurge toate sec\u021biunile din meniul din st\u00e2nga, cu excep\u021bia JS AJAX \u0219i JS jQuery. Cerin\u021be de implementare IMPORTANT: Cerin\u021bele de mai jos se vor rezolva obligatoriu toate:&hellip; <a href=\"https:\/\/www.cs.ubbcluj.ro\/~bufny\/programare-web\/programare-web-javascript\/\" class=\"more-link\">Continue Reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":267,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/wp-json\/wp\/v2\/pages\/2613"}],"collection":[{"href":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/wp-json\/wp\/v2\/comments?post=2613"}],"version-history":[{"count":4,"href":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/wp-json\/wp\/v2\/pages\/2613\/revisions"}],"predecessor-version":[{"id":2622,"href":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/wp-json\/wp\/v2\/pages\/2613\/revisions\/2622"}],"up":[{"embeddable":true,"href":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/wp-json\/wp\/v2\/pages\/267"}],"wp:attachment":[{"href":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/wp-json\/wp\/v2\/media?parent=2613"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}