برنامه نویسی

رفع دکمه “نمایش بیشتر / نمایش کمتر” با جاوا اسکریپت

سلام توسعه دهندگان! 👨‍💻👩‍💻
من یک دانشجوی CS هستم و جاوا اسکریپت را یاد می‌گیرم زیرا می‌خواهم یک توسعه‌دهنده فرانت‌اند باشم و امروز می‌خواستم مفهومی را که اخیراً در حین ساخت دکمه ساده «نمایش بیشتر / نشان دادن کمتر» با استفاده از جاوا اسکریپت یاد گرفتم به اشتراک بگذارم.
میشه بگید کد اول با کد دوم چه فرقی داره
و جادوگر حقیقت دارد!!

من سعی داشتم دکمه ای ایجاد کنم که نمایان بودن متن را تغییر دهد، مانند این:
بیشتر نشان دهد

کمتر نشان دهد

html ساده 2 پاراگراف یکی از آنها با کلاس متن مخفی متن
دکمه ای که آن را تغییر می دهیم و دکمه ای که کار را انجام می دهد

lorem ipsum dolor sit amet consectetur adipisicing elit.

fsdfsfsd ....

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

css:

.hidden-text {
  display: none;
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تمام متغیری که نیاز دارم را اعلام کردم

let showButton = document.querySelector(".show-more");
let text = document.querySelector(".text");
let value = false; // Initially, the text is hidden

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اولین کد من این بود:

showButton.addEventListener("click", (value) => {
    value = !value;
    text.classList.toggle("hidden-text");
    showButton.textContent = value ? "show less..." : "show more..."; // Update button text
});
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اما این کار نکرد، مقدار همیشه نادرست بود، حتی اگر از value=!value استفاده کردم
بعد از کمی جستجو متوجه شدم که چرا این اتفاق افتاده است

هر بار که روی دکمه کلیک می‌شد، پارامتر مقدار محلی داخل تابع callback مجدداً اعلام می‌شد که مقدار خارجی را سایه می‌اندازد.

این بدان معناست که مقدار بیرونی بدون تغییر باقی می ماند و همیشه نادرست می ماند.
و مقدار محلی در داخل callback تغییر می‌کند، اما فقط در طول اجرای آن تابع وجود دارد و بر مقدار خارجی تأثیر نمی‌گذارد.

برای حل این مشکل، باید پارامتر مقدار را از پاسخ به تماس حذف کنم و مستقیماً از مقدار خارجی که در هر کلیک روی دکمه باقی می ماند استفاده کنم.

let value = false; // Persistent state variable

showButton.addEventListener("click", () => { 
    value = !value; // Toggle the outer value
    text.classList.toggle("hidden-text");
    showButton.textContent = value ? "show less..." : "show more..."; // Update button text based on value
});

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا