درس عمل Todo List بإستخدام الجافاسكريبت (الجزء الأول)
سنتعلم معاً في هذا الدرس كيفة عمل Todo List بإستخدام الجافاسكريبت دون استخدام أي مكتبات
سنركز في هذا الدرس على استخدام الجافسكريبت فقط دون الإعتماد على مكتبة جكويري أو أي مكتبات آخرى
النتيجة النهائية للدرس :
الكود على Github (اضغط هنا)
لمشاهدة الجزء الثاني من الدرس اضغط هنا
# متطلبات الدرس :
* معرفة جيدة بأساسيات الجافاسكريبت بالإضافة إلى HTML&CSS
أهم خصائص ودوال javascrip التي يتوجب عليك معرفتها :
# ما الذي سنفعله في هذا الدرس :
- سنقوم ببناء حقل نقوم من خلاله من ادخال المهام.
- التحقق من محتوى الحقل وإظهار رسالة الخطأ.
- اضافة وحذف مهام جديدة وإظهار التحديثات بشكل مباشر.
- تحديد المهام التي تم الإنتهاء منها.
- اظهار رسالة في حال لم يكن هناك أي مهام.
لن أقوم بشرح أساسيات جافاسكريبت والدوال الأساسية بقدر ما سأعطيك فكرة عن طريقة العمل
حيث بتوجب عليك قبل هذا الدرس معرفة جيدة بأساسيات الجافاسكريبت
الآن دعنا نبدأ الدرس :
في البداية قم بإنشاء مجلد جديد على جهازك (قم بتسميته كما تريد) بداخل هذا المجلد سننشئ ثلاثة ملفات
1- index.html
2- style.css
3- index.js
الآن بعد أن أنشأت هذه الملفات سنقوم معاً بالبدء بفتح ملف index.html وقم بإضافة الكود التالي :
<!DOCTYPE html> <html lang="ar" dir="rtl"> <head> <meta charset="utf-8"> <link rel="stylesheet" href="./style.css"> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous"> <title>Todo List</title> </head> <body> <div class="container"> <form id="form"> <input type="text" name="text" id="newTodo" placeholder="اكتب النص هنا..."> <span id="error"></span> <button type="submit" name="button" id="submitButton"> <i class="far fa-calendar-plus"></i> إضافة </button> </form> <h4 id="emptyMessage">لا يوجد لديك مهمام</h4> <ul id="list"> <li> زيارة مدونة محمد جعفر <i class="fas fa-trash delete"></i> </li> <li class="checked"> الذهاب إلى التسوق <i class="fas fa-trash delete"></i> </li> </ul> </div> <script type="text/javascript" src="./index.js"> </script> </body> </html>
حسناً كما ترى مجرد ملف HTML عادي جدأً ليس هناك شيء غريب
قمنا في البداية بإضافة مكتبة fontawesome فقط لنتسطيع من اضافة بعض الأيقونات
كما قمنا ايضاً بإضافة form بسيط لنستطع ادخال البيانات من خلاله
ربما لاحظت span اسفل الحقل يحتوي على id بإسم error هنا حيث سنقوم بإضافة رسالة الخطأ عند التحقق من محتوى الحقل، سنقوم بإخفاء هذا العنصر من CSS من البداية بشكل مباشر
ربما لاحظت ايضاً تواجد عنوان h4 يحتوي على id بإسم emptyMessage وهذه الرسالة التي ستظهر عندما لا يكون هناك مهام متوفرة سنقوم بإخفائها ايضاً كما هو الحال مع رسالة الخطأ بإستخدام css فيما بعد عن طريق disply:none
وبعد ذلك واخيراً لدينا قائمة المهام مع ايقونة الحذف (قمنا هنا بإستخدام مكتبة fontawesome)
حسنا هنا انتهينا من ملف HTML ولا يوجد أي شيء يحتاج لشرح الآن سنتجه لملف style.css
بما أن هذا الدرس لا يركز على CSS سنقوم فقط بنسخ كود CSS التالي وحفظه لن نتظرق هنا لشرح أي شيء فهذا استايل بسيط فقط لإعطاء بعض الجمالية للصفحة ليس اكثر
@import url(//fonts.googleapis.com/earlyaccess/notokufiarabic.css); * { margin: 0; padding: 0; } html, button { font-family: 'Noto Kufi Arabic', sans-serif; } body { background: #dfdfdf; } .container { display: block; margin: 0 auto; background: white; padding: 30px; border-radius: 4px; height: 70vh; width: 400px; overflow: scroll; overflow: auto; } form { margin-bottom: 25px; } input { border: none; width: 95%; height: 20px; padding: 10px; background: #dfdfdf; border-radius: 4px; display: block; } #submitButton { border: none; width: 90px; height: 30px; line-height: 30px; color: white; background: #ea5455; border-radius: 4px; cursor: pointer; display: block; margin: 10px auto; font-size: 13px; } #submitButton:hover { background: #e26869; } .delete { color: white; cursor: pointer; position: absolute; left: 10px; top:10px; } .delete:hover { color: #ff5656; } ul li { list-style: none; text-align: right; font-size: 13px; background: #dfdfdf; border-radius: 4px; color: #5a5a5a; position: relative; height: 40px; line-height: 40px; margin: 15px 0; padding: 0 10px; cursor: pointer; } ul li.checked { text-decoration: line-through; background: #aba8a8; color: #fff; } ul li:hover { background: #d2cfcf; } ul li.checked:hover { background: #908e8e; } #error { text-align: right; display: block; color: red; font-size: 14px; font-family: sans-serif; margin-top: 3px; display: none; } #emptyMessage { display: block; text-align: center; margin: 0; width: 100%; color: #5a5a5a; background: #dfdfdf; height: 100px; line-height: 100px; border-radius: 4px; display: none; }
الآن بعد أن انتهينا من نسخ الاستايل يفترض أن تظهر لديك النتيجة كما في التالي :
حسناً الآن دعنا نذهب واخيراً الى ملف index.js حيث سنقوم بالبدء بكامل عملنا من هنا
أول خطوة هنا سنقوم بإنشاء متغير from
var form = document.getElementById("form");
الآن دعنا نقوم بذلك سأقوم بكتابة الكود أولا ثم سأقوم بالشرح
form.addEventListener("submit", function(event){ event.preventDefault(); addNewTodo(); });
الخانة الأولى في الدلة هي الحدث الماراد الإستماع إليه وفي الخانة الثانية الدالة التي سنقوم بتنفيذها عند حدوث الحدث
في حالتنا سنقوم بالإستماع للحدث submit (كما تلاحظ في الخانة الأولى) أي عند عمل submit للـ form الخاص بنا سنقوم بإضافة المهمة الجديدة للقائمة
بعد ذلك داخل الدالة قمنا بإضافة event.preventDefault لمنع تحديث الصفحة عند عمل submit
وفي نهاية الدالة قمنا بإضافة الدالة addNewTodo وهذه الدالة التي سنقوم بتنفيذها عن عمل submit
الآن دعنا نقوم بالذهاب لإنشاء هذه الدالة كما يلي :
function addNewTodo(){ alert('تم اضافة المهمة الجديد بنجاح'); }
حسناً بالتأكيد هذه ليست النتيجة التي نريدها أو نبحث عنها سنعود الآن لدالتنا addn newTodo وسنقوم بتعديلها كما في التالي :
function addNewTodo(){ var list = document.createElement('li'); var text = document.getElementById('newTodo').value; var nodeText = document.createTextNode(text); var errorMessage = document.getElementById('error'); }
الأول list وهنا قمنا بإنشاء عنصر li جديد بإستخدام createElement
المتغير الثاني text سنقوم فيه بحفظ النص الذي قمنا بإدخاله من خلال الحقل
المتغير الثالث nodeText قمنا بعمل نود من نوع text بإستخدام createTextNode حتى نستطيع إدخال النص الخاص داخل العنصر list
واخيرا لدينا errorMessage وهذا هو span في صفحة html الخاصة بنا الذي قمنا بإعطائه معرف بإسم error وهنا حيث سنقوم بإضافة رسالة الخطأ إن وجدت عند التحقق من محتويات الحقل الخاص بنا
الآن أول خطوة سنقوم بها أثناء ادخال المهمة الجديدة هي validations التحقق من محتوى الحقل
وهنا سنتحقق من أمرين فقط الأمر
الأول أن لا يكون الحقل فارغاً عند عمل submit
الأمر الثاني أن لا يكون النص المدخل أقل من ثلاثة أحرف
الآن دعنا نبداً بإضاف ذلك كما يلي: ( لا تنسى بأننا لا زلنا نعلم داخل دالة addNewTodo لذلك اضف هذ الكود اسفل المتغيير error message مباشرةً)
// التحقق من النص if(text === ''){ errorMessage.innerText = 'الرجاء ملئ الحقل'; // اظهار رسالة الخطأ errorMessage.style.display = 'block'; }else if (text.length < 3) { errorMessage.innerText = 'النص قصير جداً، يجب أن لا يقل عن ثلاثة احرف'; // اظهار رسالة الخطأ errorMessage.style.display = 'block'; }else{ // اضافة المهمة الجديدة }
كما تعلم لدينا العنصر span مع معرف error داخل html قمنا بتعرفه سابقاً في متغيير بإسم errorMessage وهنا بإستخدام innerText نستطيع أن ندخل أي نص بداخل العنصر
بعد ذلك سنقوم بتغيير إستايل ذلك العنصر وتغيير خاصية display إلى block
ففي الأساس نحن هنا قمنا بإخفاء هذا العنصر بإستخدام css عن طريق display:none وهنا قمنا بتغييرها عن طريق الجافاسكريبت
اتمنى أن تكون هذه النقطة قد اتضحت
بعد ذلك قمنا بالتحقق أيضاً من طول النص بإستخدام خاصية lenght والتي بدورها ستجلب لنا طول النص الذي قمنا بإدخاله من خلال الحقل
في حالتنا نريده طول النص أن لا يقل عن 3 احرف إن كنت تريد تغييرها فلك الحرية في ذلك
وبقية الحطوات هي نفس الخطوات التي قمنا بها في الخطوة السابقة ادخل نص رسالة الخطأ ثم اظهارها
الآن لو ذهبت وقمت بتجربة عمل submit دون ادخال نص يفترض أن تظهر لك رسالة الخطأ
خطوتنا التالية هي اضافة المهام واظهارها بشكل مباشر
الآن بعد else if الآخيرة بعد التحقق من محتويات الحقل هناك eles قمت بإضافة تعليق
// اضافة المهمة الجديدة
اسفل هذا التعليق مباشرة سنقوم بإدخال الكود التالي :
list.appendChild(nodeText); document.getElementById('list').prepend(list); document.getElementById('newTodo').value = ''; // اخفاء رسالة الحطأ في حال كانت ظاهرة errorMessage.style.display = 'none'; // اضافة زر الحذف var button = document.createElement("i"); button.className = "fas fa-trash delete "; list.appendChild(button);
بعدها بإستخدام prepend ستسمح لنا بإضافة العنصر الجديد كأول عنصر
في حال أردت اضافة العنصر في النهاية استخدم appendChild
بعدها قمنا بإخفاء رسالة الخطأ الخاصة بالحقل
واخيرا في النهاية قمنا بإضافة عنصر جديد من نوع i واضفنا له الكلاسات fas fa-trash delete وطبعاً هذا العنصر هو زر الحذف الخاص بنا
لا تنسى أننا نستخدم fontawesome لذلك استخدمنا العنصر i
الآن إذهب وقم بالتجربة يفترض الآن عند إضافة مهمتك الجديد أن تظهر بشكل مباشر كالتالي:
حسناً، إلى هنا نكون قد انتهينا من الجزء الأول من الدرس بعد أن قمنا بعمل التالي:
1 - التحقق من النص المدخل
2 - ادخال النص وإظهاره مباشرة أعلى القائمة
الآن يتبقى لنا 3 أشياء اخرى وهي :
1- حذف المهمة
2- تحديد المهمة بعد الإنتهاء منها
3- إظهار رسالة تفيد بإنه لا يوجد مهام عند حذف جميع المهام
وكل ذلك بإذن الله سنفعله في الجزء الثاني من الدرس إلى ذلك الحين تقبلوا تحياتي ....
لا تنسى نشر الدرس لتعم الفائدة للجميع ...
لمشاهدة الجزء الثاني من الدرس اضغط هنا
ليست هناك تعليقات