امیدوارم به بهتر شدن کمک کنم. در تلگرام و اینستاگرام پیام بفرست، SeyedAhmaddv - ارشد نرم افزار، توسعه دهنده ری اکت و نکست
واکشی داده - دریافت اطلاعات کاربران از لینک - api با استفاده از بوت استرپ و نمایش به صورت کارت و مودال
تصور کنید از یک آدرس میخواهیم اطلاعات کاربران را فتچ fetch یا واکشی کنیم.
{
"page": 1,
"per_page": 6,
"total": 12,
"total_pages": 2,
"data": [
{
"id": 1,
"email": "george.bluth@reqres.in",
"first_name": "George",
"last_name": "Bluth",
"avatar": "https://reqres.in/img/faces/1-image.jpg"
},
{
"id": 2,
"email": "janet.weaver@reqres.in",
"first_name": "Janet",
"last_name": "Weaver",
"avatar": "https://reqres.in/img/faces/2-image.jpg"
},
{
"id": 3,
"email": "emma.wong@reqres.in",
"first_name": "Emma",
"last_name": "Wong",
"avatar": "https://reqres.in/img/faces/3-image.jpg"
},
{
"id": 4,
"email": "eve.holt@reqres.in",
"first_name": "Eve",
"last_name": "Holt",
"avatar": "https://reqres.in/img/faces/4-image.jpg"
},
{
"id": 5,
"email": "charles.morris@reqres.in",
"first_name": "Charles",
"last_name": "Morris",
"avatar": "https://reqres.in/img/faces/5-image.jpg"
},
{
"id": 6,
"email": "tracey.ramos@reqres.in",
"first_name": "Tracey",
"last_name": "Ramos",
"avatar": "https://reqres.in/img/faces/6-image.jpg"
}
],
"support": {
"url": "https://reqres.in/#support-heading",
"text": "To keep ReqRes free, contributions towards server costs are appreciated!"
}
}
در بالا اطلاعات کاربران را ملاحظه میکنیم.
ادرس این api:
https://reqres.in/api/users
برای نمایش این اطلاعات میخواهیم از بوت استرپ برای استایل دهی و از جاوا اسکریپت برای واکشی اطلاعات استفاده کنیم:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>User Management</title>
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
<style>
.user-card {
cursor: pointer;
}
.card-img-top {
width: 100%;
height: 15vw;
object-fit: cover;
}
</style>
</head>
<body>
<div class="container mt-5">
<h1 class="text-center mb-4">User List</h1>
<div class="row" id="user-list">
<!-- User cards will be inserted here -->
</div>
<button class="btn btn-primary mt-4" data-toggle="modal" data-target="#addUserModal">Add User</button>
</div>
<!-- User Modal -->
<div class="modal fade" id="userModal" tabindex="-1" role="dialog" aria-labelledby="userModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="userModalLabel">User Details</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<img id="modal-avatar" src="" alt="User Avatar" class="img-fluid mb-3">
<h4 id="modal-name"></h4>
<p id="modal-email"></p>
<button class="btn btn-primary" id="edit-user-btn">Edit User</button>
<!-- Edit User Form -->
<form id="edit-user-form" class="mt-3" style="display: none;">
<div class="form-group">
<label for="edit-first-name">First Name</label>
<input type="text" class="form-control" id="edit-first-name" required>
</div>
<div class="form-group">
<label for="edit-last-name">Last Name</label>
<input type="text" class="form-control" id="edit-last-name" required>
</div>
<div class="form-group">
<label for="edit-email">Email</label>
<input type="email" class="form-control" id="edit-email" required>
</div>
<div class="form-group">
<label for="edit-avatar-url">Avatar URL</label>
<input type="url" class="form-control" id="edit-avatar-url" required>
</div>
<button type="submit" class="btn btn-success">Save Changes</button>
</form>
</div>
</div>
</div>
</div>
<!-- Add User Modal -->
<div class="modal fade" id="addUserModal" tabindex="-1" role="dialog" aria-labelledby="addUserModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="addUserModalLabel">Add New User</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<form id="add-user-form">
<div class="form-group">
<label for="first-name">First Name</label>
<input type="text" class="form-control" id="first-name" required>
</div>
<div class="form-group">
<label for="last-name">Last Name</label>
<input type="text" class="form-control" id="last-name" required>
</div>
<div class="form-group">
<label for="email">Email</label>
<input type="email" class="form-control" id="email" required>
</div>
<div class="form-group">
<label for="avatar-url">Avatar URL</label>
<input type="url" class="form-control" id="avatar-url" required>
</div>
<button type="submit" class="btn btn-success">Add User</button>
</form>
</div>
</div>
</div>
</div>
<!-- Bootstrap JS, Popper.js, and Vanilla JavaScript -->
<script src="https://code.jquery.com/jquery-3.5.1.min.js">
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.3/dist/umd/popper.min.js">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js">
document.addEventListener('DOMContentLoaded', () => {
let currentUserId = null;
// Fetch users from the API
fetch('https://reqres.in/api/users')
.then(response => response.json())
.then(data => {
const users = data.data;
const userList = document.getElementById('user-list');
users.forEach(user => {
const userCard = document.createElement('div');
userCard.className = 'col-md-4 mb-4';
userCard = `
<div class="card user-card" data-id="${user.id}">
<img src="${user.avatar}" class="card-img-top" alt="${user.first_name} ${user.last_name}">
<div class="card-body">
<h5 class="card-title">${user.first_name} ${user.last_name}</h5>
<p class="card-text">${user.email}</p>
</div>
</div>
`;
userList(userCard);
// Add click event to open user details in a modal
userCard.querySelector('.user-card').addEventListener('click', () => {
currentUserId = user.id;
document.getElementById('modal-avatar').src = user.avatar;
document.getElementById('modal-name').textContent = `${user.first_name} ${user.last_name}`;
document.getElementById('modal-email').textContent = user.email;
// Pre-fill the edit form with user data
document.getElementById('edit-first-name').value = user.first_name;
document.getElementById('edit-last-name').value = user.last_name;
document.getElementById('edit-email').value = user.email;
document.getElementById('edit-avatar-url').value = user.avatar;
document.getElementById('edit-user-form').style.display = 'none';
document.getElementById('edit-user-btn').style.display = 'block';
$('#userModal').modal('show');
});
});
});
// Show edit form on "Edit User" button click
document.getElementById('edit-user-btn').addEventListener('click', () => {
document.getElementById('edit-user-btn').style.display = 'none';
document.getElementById('edit-user-form').style.display = 'block';
});
// Handle edit form submission
document.getElementById('edit-user-form').addEventListener('submit', (event) => {
event.preventDefault();
const updatedUser = {
first_name: document.getElementById('edit-first-name').value,
last_name: document.getElementById('edit-last-name').value,
email: document.getElementById('edit-email').value,
avatar: document.getElementById('edit-avatar-url').value
};
// Send PUT request to update the user (mock)
fetch(`https://reqres.in/api/users/${currentUserId}`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(updatedUser)
})
.then(response => response.json())
.then(data => {
alert('User updated successfully!');
$('#userModal').modal('hide');
})
.catch(error => {
console.error('Error updating user:', error);
});
});
// Add new user
document.getElementById('add-user-form').addEventListener('submit', (event) => {
event.preventDefault();
const newUser = {
first_name: document.getElementById('first-name').value,
last_name: document.getElementById('last-name').value,
email: document.getElementById('email').value,
avatar: document.getElementById('avatar-url').value
};
// Send POST request to add new user (Note: reqres.in won't actually add a user, it's for testing only)
fetch('https://reqres.in/api/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(newUser)
})
.then(response => response.json())
.then(data => {
alert('User added successfully!');
$('#addUserModal').modal('hide');
})
.catch(error => {
console.error('Error adding user:', error);
});
});
});
</body>
</html>
برای مشاهده کد و نتیجه آن در کدپن اینجا کلیک کنید:
توضیحات جزئیات کد:
document.addEventListener('DOMContentLoaded', ...)
:
این رویداد زمانی که محتوای DOM به طور کامل بارگذاری شده باشد، فراخوانی میشود. به این ترتیب مطمئن میشویم که اسکریپتها پس از بارگذاری عناصر HTML اجرا میشوند.- واکنش به
fetch
:
تابعfetch
برای دریافت دادهها از API استفاده میشود. این تابع یک پرامیس برمیگرداند که میتوانیم با استفاده ازthen
وcatch
نتایج یا خطاها را مدیریت کنیم.response.json()
دادههای JSON را از پاسخ HTTP به آبجکت تبدیل میکند. - تولید کارتهای کاربر:
به ازای هر کاربر، یک عنصرdiv
با کلاسcard
ساخته میشود و اطلاعات کاربر در قالب HTML قرار میگیرد. سپس این کارت بهuser-list
که در DOM وجود دارد اضافه میشود. - اضافه کردن رویداد کلیک به کارتها:
به هر کارت یک رویدادclick
اضافه میکنیم که با کلیک بر روی آن، مودال باز شده و اطلاعات کاربر در مودال نمایش داده شود. برای این کار از ویژگیdata-id
استفاده میشود تا ID کاربر در دسترس باشد. - مدیریت مودالها:
از$('#userModal').modal('show');
برای نمایش مودال استفاده میشود. این روش با استفاده از بوت استرپ و جی کوئری پیادهسازی شده است.
درون مودال، فرمی برای ویرایش اطلاعات کاربر وجود دارد که با کلیک بر روی دکمه "Edit User" نمایش داده میشود. - ارسال درخواستهای AJAX برای ویرایش یا اضافه کردن کاربر:
از متدfetch
برای ارسال درخواستهایPUT
وPOST
به API استفاده میشود. درخواستهایPUT
برای بهروزرسانی اطلاعات کاربر و درخواستهایPOST
برای اضافه کردن کاربر جدید هستند.
در هر دو مورد، پس از موفقیت آمیز بودن عملیات، مودال بسته میشود و یک پیام هشدار نمایش داده میشود.
چگونه کد بنویسیم:
- شروع با طرحبندی HTML و CSS:
ابتدا طرحبندی صفحه را با استفاده از HTML و CSS پیادهسازی کنید. ساختار پایه شامل بخش نمایش کاربران و دکمه برای اضافه کردن کاربر جدید است. - افزودن رویدادهای جاوااسکریپت:
ازdocument.addEventListener('DOMContentLoaded', ...)
برای اطمینان از بارگذاری کامل صفحه استفاده کنید.
با استفاده ازfetch
دادهها را از API دریافت کنید و کارتهای کاربر را با استفاده ازdocument.createElement
بسازید. - استفاده از توابع برای جداسازی منطق:
سعی کنید از توابع جداگانه برای وظایف مختلف مانند ساخت کارت کاربر، باز کردن مودال، ارسال درخواست AJAX و غیره استفاده کنید. - مدیریت وضعیت:
از متغیرهایی مانندcurrentUserId
برای نگهداری اطلاعات وضعیت مانند کاربر جاری استفاده کنید تا هنگام تعامل با API به راحتی به آنها دسترسی داشته باشید.
مقدار 'col-md-4 mb-4'
در کد HTML که استفاده کردیم، مربوط به کلاسهایی از فریمورک CSS بوت استرپ است که برای استایل دهی و چیدمان عناصر در صفحه به کار میرود. بیایید هر یک از این کلاسها را بررسی کنیم:
توضیح کلاسها
col-md-4
:
Grid System:
بوت استرپ از یک سیستم شبکه (Grid) برای چیدمان صفحه استفاده میکند. این سیستم شامل 12 ستون است که میتوان با استفاده از کلاسهای CSS اندازه ستونها را تعیین کرد.col
: نشان دهنده ی یک ستون در سیستم شبکه بوت استرپ است.md
: مخفف "medium" است و به اندازه صفحه نمایش اشاره دارد. در بوت استرپ، اندازه های مختلفی برای دستگاههای مختلف تعریف شده اند که عبارتند از:xs
: برای دستگاههای کوچکتر از 576 پیکسلsm
: برای دستگاههای بزرگتر از 576 پیکسلmd
: برای دستگاههای بزرگتر از 768 پیکسلlg
: برای دستگاههای بزرگتر از 992 پیکسلxl
: برای دستگاههای بزرگتر از 1200 پیکسل4
: نشان دهنده ی تعداد ستونهایی است که این عنصر باید در سیستم شبکه اشغال کند. از آنجا که سیستم بوت استرپ 12 ستون دارد، مقدار4
به این معناست که هر عنصر به اندازه یک سوم از کل عرض صفحه را در دستگاههای متوسط و بالاتر (یعنی بزرگتر از 768 پیکسل) اشغال میکند.mb-4
:m
: نشان دهنده ی "margin" یا حاشیه است.b
: مخفف "bottom" است و به معنای حاشیه در پایین عنصر میباشد.4
: نشان دهنده ی مقدار حاشیه ای است که باید در پایین عنصر اعمال شود. بوت استرپ دارای یک سیستم اندازه گیری است که از0
تا5
برای حاشیهها و فاصلهها استفاده میکند، که به ترتیب به ترتیب به هیچ فاصلهای تا بیشترین فاصله اعمال شده اشاره دارد.
کاربرد
کلاسهای بوتاسترپ به ما این امکان را میدهند تا بدون نیاز به نوشتن CSS سفارشی، به راحتی و با سرعت بیشتری عناصر صفحه را چیدمان کنیم و به آنها استایل دهیم. در این مثال، این کلاسها به ما کمک میکنند تا کارتهای کاربر به صورت سهتایی در یک ردیف چیده شوند و هر کارت دارای یک حاشیه مناسب در پایین باشد تا فاصله مناسبی بین کارتها ایجاد شود.
استفاده از این کلاسها موجب میشود که صفحه در دستگاههای مختلف به خوبی واکنشگرا باشد و تجربه کاربری بهتری را فراهم کند.
در جاوااسکریپت، خط userList(userCard);
برای اضافه کردن یک عنصر جدید به داخل یک عنصر والد در ساختار DOM
(Document Object Model) استفاده میشود. این خط به طور خاص عنصر userCard
را به عنوان یک فرزند به داخل عنصر userList
اضافه میکند. بیایید به طور دقیقتر ببینیم که این خط چگونه کار میکند و چه نقشی در کد ما ایفا میکند.
توضیح کامل appendChild
- DOM چیست؟
DOM
یک نمایش ساختاری از سند HTML درختی شکل است که مرورگرها برای نمایش صفحات وب از آن استفاده میکنند. این ساختار به جاوااسکریپت اجازه میدهد تا به عناصر مختلف دسترسی داشته و آنها را تغییر دهد. - متد
appendChild
چیست؟
متدappendChild
یکی از متدهای رایج برای تغییرDOM
است و به ما این امکان را میدهد که یک نود (Node) جدید را به انتهای لیست فرزندان یک نود والد اضافه کنیم.
این متد فقط یک پارامتر میپذیرد که همان نود فرزند است و این نود به انتهای لیست فرزندان نود والد اضافه میشود. - نحوه استفاده از
appendChild
در کد ما:userCard
:در اینجاuserCard
یک عنصرdiv
است که به صورت پویا برای نمایش اطلاعات هر کاربر ساخته شده است. این عنصر شامل تصویر کاربر، نام و ایمیل آنها میباشد.userList
:userList
یک عنصرdiv
یاsection
درHTML
است که به عنوان محلی برای نمایش لیست کارتهای کاربران در صفحه قرار دارد. این عنصر با استفاده ازdocument.getElementById('user-list')
ازDOM
به دست آمده است. - عملکرد خط
userList(userCard);
:این خط به طور خاص عنصرuserCard
که به تازگی ایجاد شده و حاوی اطلاعات یک کاربر است را به انتهای عنصرuserList
اضافه میکند.
به این ترتیب، هر بار که یکuserCard
جدید ساخته میشود، به لیست کارتها در صفحه افزوده میشود و تمامی کارتها به ترتیب اضافه شدن نمایش داده میشوند.
چرا از appendChild
استفاده میکنیم؟
- افزودن پویا به
DOM
: متدappendChild
به ما اجازه میدهد تا به صورت پویا و در زمان اجرا، عناصر جدیدی را به صفحه اضافه کنیم. این امر به ویژه در مواقعی که دادهها از منابع خارجی مانند یک API دریافت میشوند و باید در قالب ساختارهای تکراری نمایش داده شوند، بسیار مفید است. - سادگی در استفاده:
appendChild
یک روش ساده و مستقیم برای اضافه کردن عناصر جدید بهDOM
است که نیاز به نوشتن کدهای پیچیده ندارد. - انعطافپذیری: با استفاده از این متد، میتوان به راحتی عناصر موجود در صفحه را دستکاری کرد، مانند افزودن، حذف یا جابجایی عناصر.
این خط کد به طور خاص به ما کمک میکند تا کارتهای کاربران را به صورت پویا و در حین بارگذاری صفحه یا در پاسخ به تعاملات کاربر ایجاد کرده و نمایش دهیم.
در جاوااسکریپت، متد `forEach` برای اجرای یک تابع روی هر عنصر یک آرایه استفاده میشود. این متد یکی از روشهای متداول برای تکرار روی آرایههاست و به خصوص در مواقعی که نیاز به انجام عملیاتی روی هر عنصر داریم، بسیار مفید است. در کد ما، از `forEach` برای پردازش لیست کاربران که از API دریافت میشود، استفاده شده است. بیایید ببینیم این قسمت از کد چگونه کار میکند:
توضیح users.forEach
فرض کنید بخشی از کد جاوااسکریپت شما به صورت زیر است:
userCard = `
<div class="card user-card" data-id="${user.id}">
<img src="${user.avatar}" class="card-img-top" alt="${user.first_name} ${user.last_name}">
<div class="card-body">
<h5 class="card-title">${user.first_name} ${user.last_name}</h5>
<p class="card-text">${user.email}</p>
</div>
</div>
`;
توضیح جزئیات forEach:
1. آرایه users:
- users یک آرایه است که از دادههای دریافتی از API ساخته شده و شامل اطلاعات هر کاربر است. این اطلاعات شامل نام، نام خانوادگی، ایمیل و آواتار کاربر میباشد.
- این آرایه با دسترسی به خاصیت `data` از پاسخ JSON دریافت شده، ساخته میشود. (`const users = data.data;`)
2. متد forEach:
- متد `forEach` برای تکرار روی هر عنصر در آرایه `users` به کار میرود.
- این متد به هر عنصر در آرایه به ترتیب دسترسی پیدا میکند و یک تابع مشخص را روی آن اجرا میکند.
3.پاراگراف user:
- درون تابع `forEach`, هر عنصر از آرایه `users` به عنوان پارامتر `user` به تابعی که در `forEach` تعریف شده، ارسال میشود. بنابراین در هر بار اجرای حلقه، متغیر `user` شامل یک آبجکت از اطلاعات یک کاربر میباشد.
4. ساخت کارت کاربر:
- برای هر کاربر، یک عنصر div جدید به نام userCard ساخته میشود که شامل کلاسهای بوت استرپ `col-md-4 mb-4` است.
- سپس محتوای HTML داخلی userCard با استفاده از ویژگیهای کاربر (`user.first_name`, `user.last_name`, `user.email`, `user.avatar`) به شکل دلخواه تکمیل میشود.
userCard = `
<div class="card user-card" data-id="${user.id}">
<img src="${user.avatar}" class="card-img-top" alt="${user.first_name} ${user.last_name}">
<div class="card-body">
<h5 class="card-title">${user.first_name} ${user.last_name}</h5>
<p class="card-text">${user.email}</p>
</div>
</div>
`;
5. افزودن کارت به DOM:
- پس از ساخت هر کارت کاربر، آن را به عنوان یک فرزند به userList اضافه میکنیم.
- این عمل باعث میشود کارتها به ترتیب در صفحه نمایش داده شوند.
userList(userCard);
چرا از `forEach` استفاده میکنیم؟
- سادگی: `forEach` یک روش ساده و مستقیم برای انجام عملیاتی روی هر عنصر آرایه است و به خوانایی کد کمک میکند.
- عدم نیاز به کنترل دستی ایندکس: برخلاف حلقههای `for` معمولی، در `forEach` نیازی به کنترل دستی ایندکس یا اندازه آرایه نیست.
- بهبود عملکرد کد: `forEach` به صورت داخلی برای بهینهسازی عملکرد در مرورگرها پیادهسازی شده است و میتواند کد را سریعتر و کارآمدتر اجرا کند.
- تمیز و قابل فهم: استفاده از `forEach` باعث میشود کد شما تمیزتر و قابل فهمتر باشد، زیرا هدف شما (اجرای یک عملیات روی هر عنصر آرایه) به وضوح بیان شده است.
در ادامه کد جاوااسکریپت وظیفه دارد که با کلیک بر روی کارت کاربر، جزئیات کاربر را در یک مودال (پنجرهی محاورهای) نمایش دهد. این کار با استفاده از یک تابع ناشناس و رویداد click
انجام میشود. بیایید این بخش از کد را به طور کامل بررسی کنیم.
توضیحات کد
// Add click event to open user details in a modal
userCard.querySelector('.user-card').addEventListener('click', () => {
currentUserId = user.id;
document.getElementById('modal-avatar').src = user.avatar;
document.getElementById('modal-name').textContent = `${user.first_name} ${user.last_name}`;
document.getElementById('modal-email').textContent = user.email;
// Pre-fill the edit form with user data
document.getElementById('edit-first-name').value = user.first_name;
document.getElementById('edit-last-name').value = user.last_name;
document.getElementById('edit-email').value = user.email;
document.getElementById('edit-avatar-url').value = user.avatar;
document.getElementById('edit-user-form').style.display = 'none';
document.getElementById('edit-user-btn').style.display = 'block';
$('#userModal').modal('show');
});
توضیحات جزئیات
- انتخاب کارت کاربر:
userCard.querySelector('.user-card')userCard
یک عنصرdiv
است که قبلاً در کد ایجاد شده و کلاسuser-card
دارد.querySelector('.user-card')
برای انتخاب عنصر کارت کاربر از داخلuserCard
استفاده میشود. این انتخابگر با توجه به کلاسuser-card
انجام میشود. - اضافه کردن رویداد کلیک:
.addEventListener('click', () => {addEventListener
برای گوش دادن به رویدادهای خاص روی یک عنصر استفاده میشود. در اینجا برای رویدادclick
اعمال شده است.
وقتی کاربر روی کارت کلیک میکند، تابع ناشناس (آررو فانکشن) اجرا میشود. - ذخیره ID کاربر فعلی:
currentUserId = user.id;currentUserId
یک متغیر است که ID کاربر فعلی را نگه میدارد. این ID برای انجام عملیات بعدی مانند ویرایش کاربر مورد استفاده قرار میگیرد. - نمایش جزئیات کاربر در مودال:
document.getElementById('modal-avatar').src = user.avatar;
document.getElementById('modal-name').textContent = `${user.first_name} ${user.last_name}`;
document.getElementById('modal-email').textContent = user.email;
با استفاده ازdocument.getElementById
، عناصری در مودال انتخاب میشوند و دادههای کاربر در آنها قرار میگیرد.modal-avatar
برای نمایش تصویر کاربر (آواتار) است وsrc
آن به URL تصویر کاربر تنظیم میشود.modal-name
وmodal-email
به ترتیب نام کامل و ایمیل کاربر را نمایش میدهند. - پیشپر کردن فرم ویرایش:
document.getElementById('edit-first-name').value = user.first_name;
document.getElementById('edit-last-name').value = user.last_name;
document.getElementById('edit-email').value = user.email;
document.getElementById('edit-avatar-url').value = user.avatar;
مقادیر فرم ویرایش کاربر با استفاده از اطلاعات فعلی کاربر پر میشوند.
این کار باعث میشود که کاربر بتواند به سادگی اطلاعات کاربر را ویرایش کند، زیرا اطلاعات فعلی کاربر در فرم ویرایش به صورت پیشفرض نمایش داده میشود. - مدیریت نمایش فرم ویرایش:
document.getElementById('edit-user-form').style.display = 'none'; document.getElementById('edit-user-btn').style.display = 'block';
فرم ویرایش (edit-user-form
) در ابتدا مخفی میشود و تنها دکمه ویرایش (edit-user-btn
) نمایش داده میشود.
این کار به این منظور انجام میشود که کاربر ابتدا با کلیک روی دکمه "Edit User" فرم ویرایش را ببیند. - نمایش مودال با استفاده از بوت استرپ:
code$('#userModal').modal('show');$('#userModal').modal('show');
از جیکوئری و بوت استرپ برای نمایش مودال استفاده میکند.userModal
ID مودال است و متدmodal('show')
برای نمایش آن استفاده میشود.
کاربرد کلی
این بخش از کد به کاربر امکان میدهد تا با کلیک بر روی کارت کاربر، جزئیات بیشتری از آن کاربر را در یک مودال مشاهده کند. همچنین کاربر میتواند اطلاعات کاربر را ویرایش کند، که با نمایش فرم ویرایش درون مودال امکانپذیر است. این مکانیزم تعامل کاربر با صفحه را بهبود میبخشد و تجربه کاربری بهتری را فراهم میکند.
نمایش فرم ویرایش با کلیک بر روی دکمه "ویرایش کاربر"
// Show edit form on "Edit User" button click
document.getElementById('edit-user-btn').addEventListener('click', () => {
document.getElementById('edit-user-btn').style.display = 'none';
document.getElementById('edit-user-form').style.display = 'block';
});
این بخش از کد جاوااسکریپت مسئولیت مدیریت نمایش فرم ویرایش کاربر و پردازش ارسال فرم ویرایش را دارد. بیایید به صورت جزئیتر توضیح دهیم که هر قسمت از این کد چه کار میکند:
- انتخاب دکمه "ویرایش کاربر":با استفاده از
document.getElementById('edit-user-btn')
دکمهای که برای ویرایش کاربر وجود دارد انتخاب میشود. - اضافه کردن رویداد کلیک:متد
addEventListener
برای اضافه کردن رویدادclick
به دکمه "ویرایش کاربر" استفاده میشود.
وقتی کاربر روی این دکمه کلیک میکند، تابع ناشناسی که در اینجا تعریف شده است اجرا میشود. - نمایش فرم ویرایش و مخفی کردن دکمه "ویرایش کاربر":
document.getElementById('edit-user-btn').style.display = 'none';
باعث میشود که دکمه "ویرایش کاربر" پنهان شود.document.getElementById('edit-user-form').style.display = 'block';
باعث میشود که فرم ویرایش که به طور پیشفرض پنهان بود، نمایش داده شود.
این عمل اجازه میدهد تا کاربر به فرم ویرایش دسترسی پیدا کرده و اطلاعات مورد نظر خود را وارد کند.
مدیریت ارسال فرم ویرایش
// Handle edit form submission
document.getElementById('edit-user-form').addEventListener('submit', (event) => {
event.preventDefault();
const updatedUser = {
first_name: document.getElementById('edit-first-name').value,
last_name: document.getElementById('edit-last-name').value,
email: document.getElementById('edit-email').value,
avatar: document.getElementById('edit-avatar-url').value
};
});
- انتخاب فرم ویرایش کاربر:
document.getElementById('edit-user-form')
فرم ویرایش کاربر را انتخاب میکند. - اضافه کردن رویداد ارسال:
متدaddEventListener
برای گوش دادن به رویدادsubmit
در فرم استفاده میشود.
وقتی کاربر دکمه ارسال (Submit) فرم را فشار میدهد، تابع ناشناس اجرا میشود. - جلوگیری از ارسال پیشفرض فرم:
event.preventDefault();
برای جلوگیری از رفتار پیشفرض مرورگر هنگام ارسال فرم به کار میرود.
به طور پیشفرض، فرمها باعث بارگذاری مجدد صفحه میشوند. با استفاده از این خط، مانع از این کار میشویم و به ما اجازه میدهد عملیات ارسال داده به صورت برنامهریزیشده انجام شود. - دریافت دادههای فرم و ساخت آبجکت
updatedUser
:
با استفاده ازdocument.getElementById('edit-first-name').value
و دیگر دستورات مشابه، مقادیر ورودیهای فرم دریافت میشود.
یک آبجکتupdatedUser
ساخته میشود که شامل اطلاعات ویرایششده کاربر است.
این آبجکت شامل فیلدهایfirst_name
,last_name
,email
وavatar
است که با مقادیر جدیدی که کاربر وارد کرده پر میشود.
کاربرد کلی
این بخش از کد اجازه میدهد که کاربر بتواند اطلاعات یک کاربر خاص را ویرایش کند. هنگامی که کاربر دکمه "ویرایش کاربر" را میفشارد، فرم ویرایش باز میشود و کاربر میتواند اطلاعات مورد نظر خود را تغییر دهد. بعد از تکمیل فرم و فشار دادن دکمه ارسال، دادههای جدید کاربر جمعآوری میشود و میتواند برای بهروزرسانی اطلاعات کاربر در سیستم یا ارسال آن به یک سرور استفاده شود.
این ساختار به شما امکان میدهد که به صورت پویا و با تعامل کاربر، دادهها را مدیریت کنید.
مطلبی دیگر از این انتشارات
پرامیس promis و then(res) در تابع ناهمزمان جاوا اسکریپت چیست؟
مطلبی دیگر از این انتشارات
استراتژی های فرانت اند: فریمورک (سکو) یا جاوا اسکریپت خالص؟
مطلبی دیگر از این انتشارات
معرفی عملگر «انتساب ایمن» در ECMAScript جایگزین بلوک های Try-Catch