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

السؤال

نشر

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

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
نشر

المشكلة لديك أنك تحاول الاستعلام عن زر انتهاء المهمة عند تحميل الصفحة مباشرة، وذلك غير ممكن لأن المهمة لم تٌضاف بعد، الحل يكون بإنشاء عنصر 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:

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

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

  • 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);
  }
};

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...