سلام.
من با جاوا اسکریپت میخوام بخش فایل توی فرمم رو چک کنم.
توی فرم 2 تا فیلد هست که هر دو تا اپشنال هستن. یکی برای عکس و یکی برای فایل
حالا من برای چک همچین کدی نوشتم
var pic = document.getElementById('pic').files[0];
var file = document.getElementById('file').files[0];
if(pic.size < 3000000){
if(file.size < 8000000){
حالا کد وقتی که کاربر عکس رو آپلود میکنه کار می کنه و برای فیلد فایل ایراد حجم میگیره.
اما وقتی که عکس انتخاب نمیشه ، کد بخش فایل هم کار نمیکنه و هر حجمی رو قبول می کنه.
مشکل از کجاست؟
دقیق نمیدونم دنبال چی هستید و صورت مسئله چیه. ولی تا جایی که فهمیدم هدفتون رو، این رو امتحان کنید:
$('#Check').submit(function(evt){
var pics = document.getElementById('pics').files[0];
var file = document.getElementById('file').files[0];
if(pics) {
if(pics.size < 3000000){
} else{evt.preventDefault();alert('err')}
}
if(file) {
if(file.size < 8000000){
//Submit form
}else{evt.preventDefault();alert('err')}
}
});
@adoniya.ir
سلام.
مقاله زیر رو بررسی کنید :
https://www.codeproject.com/Questions/697796/Required-Fileupload-validation-using-javascript
سلام. @mohsenbostan
این لینک اصلا به درد کار من نمیخوره در مورد اعتبار سنجی یک فیلد هست که موضوع سوال من نیست.
ببینید ما دو تا فیلد فایل داریم.
توی اولی عکس اپ میشه و توی دومی فایل با فرمت مختلف.
موقعی که عکس انتخاب میشه جاوا درست عمل میکنه.
اما موقعی که عکس انتخاب نمیشه، انگار بخش اعتبار سنجی فیلد دوم اصلا نادیده گرفته میشه.
دوستان کسی راهشو بلد نیست؟؟؟؟
توی شرط اول گفتیم عکس کمتر از حدود ۳ مگ، پس اگه کاربر عکسی رو انتخاب نکنه حجم میشه صفر و شرط اول برقراره اما چرا شرط دوم توی این شرایط اجرا نمیشه؟
1) منظورتون جاوااسکریپت هستش یا جاوا؟ اینا باهم فرق دارند.
2) کدهای HTML و JS رو باهم قرار بدین.
سلام فرقی نداره کلا کار راه بیفته.
کد html
<form method="post" enctype="multipart/form-data" id="Check">
<table>
<tr><td>تصویر شاخص : </td></tr>
<tr><td><input type="file" name="pics" id="pics"></td></tr>
<tr><td>فایـل ضمیمـه : </td></tr>
<tr><td><input type="file" name="file" id="file"></td></tr>
<tr><td>
<button type="submit">send</button>
</td></tr>
</table></form>
کد فایل JS
$('#Check').submit(function(evt){
var pics = document.getElementById('pics').files[0];
var file = document.getElementById('file').files[0];
if(pics.size < 3000000){
if(file.size < 8000000){
//Submit form
}else{evt.preventDefault();alret ....}
}else{evt.preventDefault();alret ....}
});
کدهای دیگه هم بود که خلاصه کردم.
تویه همین قسمت مشکل وجود داره. اگر برای فیلد pics یه فایل انتخاب بشه فیلد file هم به درستی کار می کنه.
اما اگر برای فیلد pics هیچ فایلی انتخاب نکنیم. فیلد file اعتبار سنجی نمیشه و ایراد حجم نمیگیره.
منظورم اینه که دسته بندی گفتگو رو اشتباه که قرار بدین، شاید سایرین هم نیان کمک تون کنند، فکر می کنند درباره جاوا و موبایل هستش.
دسته بندی صحیح که قرار بدین برای آینده هم بهتره.
فکر می کنم مشکل کدهاتون هم پیداست، دلیلش اینه که شما شرط رو تودرتو قرار دادین.
این باید خطای شما باشه.
به چه دلیل شرط اندازه فایل رو داخل شرط اندازه عکس گذاشتید؟
این مشکل ساز شده.
ممنونم. درسته شرط ها تو در تو هستن، اما از لحاظ منطقی نباید مشکل ایجاد کنه. مثلا اگه کاربر عکس ارسال نکنه شرط اول مقدار ۰ رو برای حجم بر میگردونه که درسته اما چرا شرط دوم کار نمیکنه؟
اگه بخوایم درستش کنیم شروط باید چطور نوشته بشه؟
هر دو فیلد اپشنال هستن ولی در صورت انتخاب فایل باید حجم ها چک بشن.
ممنون میشم کدمو اصلاح کنید و قرار بدین.
@milad
خیر، اشتباه می کنید، منطقی هستش.
چون مقدار متغیر pics زمانی که کاربر عکسی رو وارد نکرده باشه، مقدار تعریف نشده (undefined) میشه. برای همین قرار نیست عدد 0 رو برای اندازه نشون بده.
دقیق نمیدونم دنبال چی هستید و صورت مسئله چیه. ولی تا جایی که فهمیدم هدفتون رو، این رو امتحان کنید:
$('#Check').submit(function(evt){
var pics = document.getElementById('pics').files[0];
var file = document.getElementById('file').files[0];
if(pics) {
if(pics.size < 3000000){
} else{evt.preventDefault();alert('err')}
}
if(file) {
if(file.size < 8000000){
//Submit form
}else{evt.preventDefault();alert('err')}
}
});
@milad
آقا دمت گرم. کارت درسته.
مشکل حل شد. اینکه دو تا شرط رو از هم جدا کردیم و از console.log استفاده کردیم عالی بود.
یه سوال این console.log دقیقا چیکار می کنه؟
سلامت باشی عزیز جان
چه خوب که حل شدش
نه این بخش console.log مهم نیستش، اون واسه این بود که من خطایابی کنم و بتونم کد رو تحلیل کنم. اون نباید جز کدها باشه (حذفش کردم).
برای سنجش کدها و خطایابی، برنامه نویس ها از تابع console.log کمک میگیرند.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟