اذهب إلى المحتوى
  • 0

مشلكة في مشروع to do list زر الانتهاء و الحذف لا يعمل

Mohammed Hhhh

السؤال

انا لدي مشكله في مشروعي قمت بعمل اضافه لل مهام و لكن مهمة الحذف و الـــ النتهاء من المهمه لا تعمل ما السبب و شكرا 

html 

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  <link href="https://fonts.googleapis.com/css2?family=Poppins&display=swap" rel="stylesheet">
  <link rel="stylesheet" href="style.css">
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.0/css/all.min.css"
    integrity="sha512-xh6O/CkQoPOWDdYTDqeRdPCVd1SpvCA9XXcUnZS2FmJNp1coAFzvtCN9BmamE+4aHK8yyUHUSCcJHgXloTyT2A=="
    crossorigin="anonymous" referrerpolicy="no-referrer" />
  <title>To Do List</title>
</head>

<body>

  <header>To do List</header>
  <form action="">
    <input class="txt" id = "txt" type="text" placeholder="Please Write Here!" id="todo_txt">
    <button type="submit" id="submit_todo"><i class="fa-solid fa-square-plus"></i></button>
  </form>

  <div class="availabel"></div>

  <ul class="tasks" id = "ul">

    <!-- js -->
    
  </ul>


  <script src="main.js"></script>
</body>

</html>

css

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    font-family: 'Poppins', sans-serif;
    transition: all ease;
    -webkit-transition: all ease;
    -moz-transition: all ease;
    -ms-transition: all ease;
    -o-transition: all ease;
}

header {
    width: 100%;
    height: 5vh;
    background-color: rgb(39, 39, 39);
    color: white;
    padding: 20px;
    display: flex;
    align-items: center;
}

form {
    margin: 50px;
    width: 100%;
    height: 5vh;
    display: flex;
    align-items: center;
    justify-content: center;
}

.txt {
    padding: 5px;
    margin: 10px;
    width: 500px;
}

form button {

    width: 100px;
    font-size: 20px;

}

.tasks {
    min-width: 100%;
    background-color: rgb(103, 103, 103);
    padding: 30px;
    color: white;
}

.singil_task {
    min-width: 100%;
    display: flex;
    justify-content: space-evenly;
    align-items: center;
    margin: 5px;
    background-color: rgb(23, 23, 23);
    padding: 30px;
    border-radius: 10px;
    -webkit-border-radius: 10px;
    -moz-border-radius: 10px;
    -ms-border-radius: 10px;
    -o-border-radius: 10px;
}

p {
    max-width: 50%;
    min-width: 50%;
    overflow: hidden;
}

.icons {
    min-width: 74px;
    font-size: 24px;
}

.icons i {
    transition: all ease 0.5s;
    -webkit-transition: all ease 0.5s;
    -moz-transition: all ease 0.5s;
    -ms-transition: all ease 0.5s;
    -o-transition: all ease 0.5s;
}

.fa-circle-xmark:hover {
    color: red;
}

.fa-circle-check:hover {
    color: green;
}

.availabel {
    text-align: center;
    position: absolute;
    width: 210px;
    height: 45px;
    top: 115px;
    right: 0;
}

h5 {
    animation: animationv ease 1.2s;
    -webkit-animation: animationv ease 1.2s;
}

.singil_task {
    animation: animationc ease 0.5s;
}

@keyframes animationc {
    0% {
        opacity: 0.5;
        transform: perspective(700px) translate(0px, 80px);
        transform-origin: center center;
    }

    100% {
        opacity: 1;

        transform: perspective(700px);
        transform-origin: center center;

    }
}

@keyframes animationv {
    0% {
        opacity: 0.5;
        transform: perspective(700px) translate(0px, 80px);
        transform-origin: center center;
    }

    50% {
        opacity: 1;

        transform: perspective(700px);
        transform-origin: center center;

    }

    100% {
        opacity: 0;
        transform: perspective(700px) translate(0px, 80px);
        transform-origin: center center;
    }
}

.done{
    opacity: 0.2 ;
    background-color: green ;
    color: black ;
}

JS

let task_title = document.getElementById("txt");
let submit_btn = document.getElementById("submit_todo");
let availabel = document.querySelector(".availabel");

// proplem!!
let cheak = document.querySelector(".fa-circle-check");
//----

let li = document.createElement("li");

submit_btn.onclick = function (e) {
    e.preventDefault();

    if (task_title.value != "") {

        let ul = document.getElementById("ul");

        li.classList.add("singil_task");

        let p = document.createElement("p");
        p.textContent = task_title.value;

        let div_icons = document.createElement("div");
        div_icons.classList.add("icons");

        div_icons.innerHTML = `


        <i class="fa-circle-check fa-sharp fa-solid "></i>
        <i class="fa-circle-xmark fa-solid" style="padding-left: 15px;"></i>


    `

        li.appendChild(p);
        li.appendChild(div_icons);
        ul.appendChild(li);
        task_title.value = "";

    } else {
        let h5 = document.createElement("h5");
        h5.textContent = "please enter a task"
        h5.style.color = "red";
        h5.style.display = "block";
        h5.style.padding = "10px";

        availabel.appendChild(h5);
        setTimeout(_ => { h5.remove() }, 1000)
    }
}


// proplem
// proplem
cheak.addEventListener("onclick" , function(){
    li.classList.add("done");
})
// proplem
// proplem

مع الملاحظه بأن المشطله بالأسفل

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0
بتاريخ 29 دقائق مضت قال Mohammmed Mahmoud:

برجاء ارسال الكود كامل عشان افهم

شيفرة جافاسكربت للحل المذكور كاملة:

let task_title = document.getElementById("txt");
let submit_btn = document.getElementById("submit_todo");
let availabel = document.querySelector(".availabel");

submit_btn.onclick = function (e) {
  e.preventDefault();

  if (task_title.value != "") {
    let ul = document.getElementById("ul");

    let li = document.createElement("li");
    li.classList.add("singil_task");

    let p = document.createElement("p");
    p.textContent = task_title.value;

    let div_icons = document.createElement("div");
    div_icons.classList.add("icons");

    div_icons.innerHTML = `
<i class="fa-circle-check fa-sharp fa-solid "></i>
<i class="fa-circle-xmark fa-solid" style="padding-left: 15px;"></i>
`;

    li.appendChild(p);
    li.appendChild(div_icons);
    ul.appendChild(li);
    task_title.value = "";

    let cheak = li.querySelector(".fa-circle-check");
    cheak.addEventListener("click", function () {
      li.classList.add("done");
    });
    let deleteBtn = li.querySelector(".fa-circle-xmark");
    deleteBtn.addEventListener("click", function () {
      li.remove();
    });
  } else {
    let h5 = document.createElement("h5");
    h5.textContent = "please enter a task";
    h5.style.color = "red";
    h5.style.display = "block";
    h5.style.padding = "10px";

    availabel.appendChild(h5);
    setTimeout((_) => {
      h5.remove();
    }, 1000);
  }
};

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

المشكلة لديك أنك تحاول الاستعلام عن زر انتهاء المهمة عند تحميل الصفحة مباشرة، وذلك غير ممكن لأن المهمة لم تٌضاف بعد، الحل يكون بإنشاء عنصر li داخل حدث الاضافة وليس خارجه، والاستعلام عن زر انهاء المهمة بعد ذلك مباشرة، ثم ربط الحدث click وليس onclick به لتنفيذ عملية الانهاء كالتالي:

submit_btn.onclick = function (e) {
  let li = document.createElement("li"); // انشاء عنصر المهمة
  ...

  let cheak = li.querySelector(".fa-circle-check"); // الاستعلام عن الأزرار
  cheak.addEventListener("click", ..); // ربط حدث ضغط الزر
  
  // بنفس الطريقة لزر الحذف
  // ..
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 37 دقائق مضت قال Hassan Hedr:

المشكلة لديك أنك تحاول الاستعلام عن زر انتهاء المهمة عند تحميل الصفحة مباشرة، وذلك غير ممكن لأن المهمة لم تٌضاف بعد، الحل يكون بإنشاء عنصر li داخل حدث الاضافة وليس خارجه، والاستعلام عن زر انهاء المهمة بعد ذلك مباشرة، ثم ربط الحدث click وليس onclick به لتنفيذ عملية الانهاء كالتالي:


submit_btn.onclick = function (e) {
  let li = document.createElement("li"); // انشاء عنصر المهمة
  ...

  let cheak = li.querySelector(".fa-circle-check"); // الاستعلام عن الأزرار
  cheak.addEventListener("click", ..); // ربط حدث ضغط الزر
  
  // بنفس الطريقة لزر الحذف
  // ..
}

 

لم افهم و انا المشكله عندي كيف احدد العنصر عشان احذفه 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ منذ ساعة مضت قال Mohammmed Mahmoud:

لم افهم و انا المشكله عندي كيف احدد العنصر عشان احذفه 

كما ذكرت لك بنفس طريقة برمجة وظيفة زر انهاء المهمة، يجب تحديد زر الحذف وإضافة معالج للحدث click له، بداخله يمكنك حذف عنصر li للمهمة كالتالي:

submit_btn.onclick = function (e) {
  let li = document.createElement("li"); // انشاء عنصر المهمة
  // ..
  let deleteBtn = li.querySelector(".fa-circle-xmark"); // تحديد زر الحذف
  deleteBtn.addEventListener("click", function () {
    li.remove(); // حذف عنصر المهمة 
  });
  //..
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

إذا فتحت الكونسول بعد فتح الصفحة ستجد خطأ مفاده أنك تحاول الإنصات addEventListener الى عنصر غير موجود تسميه في الكود الخاص بك بمتغير cheak وهذا لأنك تحاول الوصول الى هذا العنصر مبكراً قبل أن يوجد أصلا لأنك تقوم بإنشاء عناصر li من خلال إضافتها بالإستعانة بجافاسكريت وليس قبل أن يتم تحميل الصفحة. لحل المشكلة قم بإجراء التعديلات التالية على الكود الخاص بك وستعمل لديك خاصية الحذف وأيضا إكمال المهمات.

// إحذف هذا الجزء من الكود لأنه لايعمل
// cheak.addEventListener("onclick" , function(){
//     li.classList.add("done");
// })
...
//بكامل محتوياته كما نقوم بإضافة الصنف الذي يعمل تنسيق معين يظهر لنا العنصر قد تم إنهاءه. إذا لم تنشئ هذا الصنف بعد يمكنك إنشاءه li قم بتعديل هذا الجزء ليصبح الكود فعالاً حيث تلاحظ أننا نحذف العنصر
// i هنا نربط الحذف والإكمال بالنقر على العنصر 
<i onclick="li.classList.add('done');" class="fa-circle-check fa-sharp fa-solid "></i>
<i onclick="li.remove()" class="fa-circle-xmark fa-solid" style="padding-left: 15px;"></i>
...
	
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 30 دقائق مضت قال علي محسن:

إذا فتحت الكونسول بعد فتح الصفحة ستجد خطأ مفاده أنك تحاول الإنصات addEventListener الى عنصر غير موجود تسميه في الكود الخاص بك بمتغير cheak وهذا لأنك تحاول الوصول الى هذا العنصر مبكراً قبل أن يوجد أصلا لأنك تقوم بإنشاء عناصر li من خلال إضافتها بالإستعانة بجافاسكريت وليس قبل أن يتم تحميل الصفحة. لحل المشكلة قم بإجراء التعديلات التالية على الكود الخاص بك وستعمل لديك خاصية الحذف وأيضا إكمال المهمات.


// إحذف هذا الجزء من الكود لأنه لايعمل
// cheak.addEventListener("onclick" , function(){
//     li.classList.add("done");
// })
...
//بكامل محتوياته كما نقوم بإضافة الصنف الذي يعمل تنسيق معين يظهر لنا العنصر قد تم إنهاءه. إذا لم تنشئ هذا الصنف بعد يمكنك إنشاءه li قم بتعديل هذا الجزء ليصبح الكود فعالاً حيث تلاحظ أننا نحذف العنصر
// i هنا نربط الحذف والإكمال بالنقر على العنصر 
<i onclick="this.classList.add('done');" class="fa-circle-check fa-sharp fa-solid "></i>
<i onclick="li.remove()" class="fa-circle-xmark fa-solid" style="padding-left: 15px;"></i>
...
	

برجاء ارسال الكود كامل عشان افهم

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 14 ساعات قال Mohammmed Mahmoud:

برجاء ارسال الكود كامل عشان افهم

هذا الكود الخاص بك والتعديلات على جزء صغير منه وهو واضح أليس كذلك؟ تحتاج الى إستبدال السطرين لديك في الكود بالسطرين الذين وضعتهما لك. هذا كل شيء.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...