{"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-03-30T08:42:25","modified_gmt":"2026-03-30T05:42:25","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","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":3,"href":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/wp-json\/wp\/v2\/pages\/2613\/revisions"}],"predecessor-version":[{"id":2617,"href":"https:\/\/www.cs.ubbcluj.ro\/~bufny\/wp-json\/wp\/v2\/pages\/2613\/revisions\/2617"}],"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}]}}