السلام عليكم عند اضافة اكواد رفع الصور الى صفحة النشر
في موقعي
و بعد اختيار الصورة و الضغط على زر رفع يتم اعادة تحميل الصفحة بدلا من رفع الصورة و توليد رابط مباشر لها
اكواد صفحة رفع الصور تعمل بشكل سليم و هي في صفحة منفصلة عن صفحة النشر ربما المشكلة في الازرار لا اعلم
هذا جزء رفع الصور
<form id="upload-form" enctype="multipart/form-data">
<input type="file" name="file" id="file" accept="image/*,video/*" required>
<br><br>
<button type="submit">رفع</button>
</form>
<div id="progress-bar">
<div></div>
</div>
<div id="result"></div>
<h3>روابط الصور المضافة:</h3>
<div id="imageFieldsContainer"></div>
<script>
// دالة لإضافة حقل رابط صورة جديد
function addImageField(url = '') {
var container = document.getElementById('imageFieldsContainer');
var inputField = document.createElement('input');
inputField.type = 'url';
inputField.name = 'image_urls[]';
inputField.placeholder = 'رابط صورة (اختياري)';
inputField.style.width = '100%';
// إذا كان الرابط موجودًا، قم بضبط القيمة وجعل الحقل للقراءة فقط
if (url) {
inputField.value = url;
inputField.readOnly = true;
}
container.appendChild(inputField);
container.appendChild(document.createElement('br')); // إضافة سطر جديد بعد الحقل
}
document.getElementById('upload-form').addEventListener('submit', function(event) {
event.preventDefault();
var fileInput = document.getElementById('file');
var file = fileInput.files[0];
var formData = new FormData();
formData.append('file', file);
var xhr = new XMLHttpRequest();
xhr.open('POST', '', true);
xhr.upload.onprogress = function(e) {
if (e.lengthComputable) {
var percentComplete = (e.loaded / e.total) * 100;
document.querySelector('#progress-bar div').style.width = percentComplete + '%';
document.querySelector('#progress-bar div').textContent = Math.round(percentComplete) + '%';
}
};
xhr.onload = function() {
if (xhr.status == 200) {
var response = JSON.parse(xhr.responseText);
var resultDiv = document.getElementById('result');
if (response.success) {
resultDiv.innerHTML = `<p>تم رفع الملف بنجاح. يمكنك الوصول إليه عبر الرابط التالي:</p>`;
resultDiv.innerHTML += `<a href="${response.url}" target="_blank">${response.url}</a>`;
// إضافة الرابط إلى حقل الصور تلقائيًا
addImageField(response.url);
} else {
resultDiv.textContent = 'حدث خطأ أثناء رفع الملف.';
}
} else {
alert('حدث خطأ أثناء محاولة رفع الملف.');
}
};
xhr.send(formData);
});
</script>
و هذا زر نشر المنشور
<button type="submit" name="submit_post">نشر المنشور</button>
</form>
يمكنك تجربة وضع خاصية onsubmit على عنصر ال form كالتالي :
<form id="upload-form" enctype="multipart/form-data" onsubmit="return uploadImage(event);" >
ويمكنك إنشاء دالة uploadImage كالتالي ليتم تنفيذها عن محاولة إرسال النموذج :
function uploadImage (event){
event.preventDefault();
var fileInput = document.getElementById('file');
var file = fileInput.files[0];
var formData = new FormData();
formData.append('file', file);
var xhr = new XMLHttpRequest();
xhr.open('POST', '', true);
xhr.upload.onprogress = function(e) {
if (e.lengthComputable) {
var percentComplete = (e.loaded / e.total) * 100;
document.querySelector('#progress-bar div').style.width = percentComplete + '%';
document.querySelector('#progress-bar div').textContent = Math.round(percentComplete) + '%';
}
};
xhr.onload = function() {
if (xhr.status == 200) {
var response = JSON.parse(xhr.responseText);
var resultDiv = document.getElementById('result');
if (response.success) {
resultDiv.innerHTML = `<p>تم رفع الملف بنجاح. يمكنك الوصول إليه عبر الرابط التالي:</p>`;
resultDiv.innerHTML += `<a href="${response.url}" target="_blank">${response.url}</a>`;
// إضافة الرابط إلى حقل الصور تلقائيًا
addImageField(response.url);
} else {
resultDiv.textContent = 'حدث خطأ أثناء رفع الملف.';
}
} else {
alert('حدث خطأ أثناء محاولة رفع الملف.');
}
};
xhr.send(formData);
return false;
}
ويجب هكذا أن تعمل معك ولا يتم إعادة تحميل الصفحة.
لدي ملاحظة هي ان صفحة رفع الصور لوحدها قبل اضافتها لصفحة النشر كانت و لازالت ترفع الصور من غير اعادة تحميل الصفحة لكن عند اضافتها لصفحة النشر اصبح يعيد تحميل الصفحة
هذا رابط صفحة رفع الصور لوحدها
مع ان الكود هو نفسه الذي يوحد بالصفحة لكن تم تعديله ليتم تعبئة حقول رابط الصور مباشرة بدلا من اليدوي
اذا لماذا عند دمجهما معا حدث ذلك
اذا كنت تريد الكود الكامل المدمج لمساعدتي لكي اضعه في تعليق هنا
التعليقات