انجمن‌های فارس وب

نسخه کامل: اضافه كردن يك input با استفاده از جاوا اسکریپت
شما در حال بازدید از بایگانی ارسال های انجمن هستید این نسخه کامل نیست : برای مشاهده نسخه کامل اینجا کلیک کنید
سلام به دوستان

سوال:
يه دونه فرم با يك كليد براي انتخاب فايل و يك كليد ديگر براي اضافه كردن دلخواه انتخاب فايل ديگر ،،، داريم با اين كد:

<form id="upload_form" name="form1" method="post" 
enctype="multipart/form-data">
<
input name="brows[]" class="intext submitbtn" type="file" />
<
input name="add" type="button" id="add" 
value="Submit" onclick="javascript:" />
</
form

حالا ميخوام وقتي روي كليد زدم يه دونه input درج بشه با نام brows[] . با php اين كار رو كردم ولي فقط يه بار درج ميكنه و ديگه درج نميكنه.غمگیننهممم
اگه با php بشه كه خيلي خوبه اگه هم نشد با java كمكم كنيد.

منظور رو رسوندم؟هان؟

پيشاپيش ممنونآره[آره]

دوست من؛ شیوه‌ی پرسش، لحن کلام و نگارش متکلم، فاکتورهای ترغیب کننده‌ی ارسال پاسخ توسط مخاطب هستند. متاسفانه شما منظورتون رو اونطور که باید نرسوندین و توضیحات شما کافی نیست. البته جواب‌های طولانی هم دلیلی برای بی‌میلی به پاسخ دادن هستش که بهتره دوستان سوال‌هاشون رو بخش بخش مطرح کنند.

اما اگه منظورتون اینه که با کلیک بر روی یک متن؛ یک ورودی فرم ایجاد بشه باید بگم که ارتباطی به PHP نداره و اینگونه موارد سمت کاربر هستند.

برای انجام این کار ابتدا آیتم‌های مورد نظر رو بررسی می‌کنیم. یک تگ DIV برای ایجاد یک شی درون آن؛ یک تابع برای انجام این کار و یک لینک که با کلیک روی اون این کار انجام می‌شه. پس اول یک DIV با ID دلخواه در جایی که انتظار نمایش آیتم‌های مورد نظر رو داریم ایجاد می‌کنیم:

<div id="inputs"></div>


و با افزودن کدهای شما به صورت زیر خواهد بود:

<form id="upload_form" name="form1" method="post"
enctype="multipart/form-data">
<input name="brows[]" class="intext submitbtn" type="file" />
<div id="inputs"></div>
</form>


حالا لینک افزودن ورودی جدید رو هم در مکان دلخواه ایجاد می‌کنیم:

<a href="javascript: addInput()">آپلود فایلی دیگر</a>


همونطور که می‌بینید با کلیک بر روی لینک تابع ()addInput فراخونی می‌شه که کار اون اینه که ورودی دلخواه شما رو در مکان دلخواه که همون تگ DIV با آی دی inputs هست؛ ایجاد کنه:

function addInput() {
    var 
targetDiv document.getElementById('inputs');
    var 
newinput "<input name=\"brows[]\" type=\"file\">"+"<br>";
    
targetDiv.innerHTML += newinput;


موفق باشید.

1. به رسم ادب سلام
2 . آقاي بنيان عالم . من به شما ارادت زيادي دارم لبخند. شما رو كم ميشه پيدا كرد . انگار ديگه به انجمن php سر نمي زنيد . واقعا خوشحال شدم ديدم شما جواب داديد .
3. كد كاملا درست بود و جواب داد و از توضيحات دقيق شما كمال تشكر رو دارم.
4. يه سوال ديگه مربوط به همين سوال و كارايي ان است:
اگر بخواهيم هنگام درج در كنار input ، يك لينك براي حذف آن ايجاد شود و با كليك روي آن input درج شده حذف شود.
5 . كار innet HTML چي هست ؟...؟؟؟؟هوم
ممنونم؛ شما به بنده لطف دارید.

باز هم آیتم‌های شاخص‌ رو با هم بررسی می‌کنیم.

لزومات حذف هر کدام از ورودی‌ها یک لینک "حذف" هستش که به کلیک بر روی اون تابع ()removeInpt اجرا بشه. اما تابع ()removeInpt می‌بایست آبجکت هدف رو شناسایی کنه، بنابراین هر input رو درون یک SPAN قرار می‌دیم و ID مشخصی به اون نسبت می‌دیم. از اونجایی که این برنامه پویا (dynamic) هستش، بنابراین آی دی ها هم باید به صورت پویا تولید بشن. پس به یک input مخفی برای نگه‌داری آی‌دی مرجع که همون آخرین ID هست، نیاز داریم.

پس فرم مورد نظر رو با اضافه کردن ورودی آی‌دی مرجع (آخرین آی‌دی تولید شده) به صورت زیر تغییر می‌دیم:

<form id="upload_form" name="form1" method="post"
enctype="multipart/form-data">
<input type="hidden" id="lastId" value="1">
<input name="brows[]" class="intext submitbtn" type="file" />
<div id="inputs"></div>
<input type="submit" value="آپلود فایل‌ها" />
</form>


حالا باید در تابع ()addInput تغییراتی رو انجام بدیم. اول مقدار ورودی lastId رو می‌گیریم:

inputId document.getElementById('lastId'); 


لینک حذف رو ایجاد می‌کنیم:

var deleteLink " <a href=\"javascript: removeInput('input_"+inputId.value+"');\">حذف</a>"

توجه کنید که جهت حذف ورودی تابع ()removeInput به کار بردیم که کار اون فرستادن کلمه "_input" به علاوه مقدار ورودی ایجاد شده فعلی هستش مثلاً (input_4)

متغیر newinput هم نیاز به تغییراتی داره که بر اساس اون لینک حذف هم کنار ورودی جدید قرار بگیره و یک واحد به مقدار lastId اضافه بشه: (++inputId.value)

var newinput "<div id=\"input_"+inputId.value+++"\"><input name=\"brows[]\" type=\"file\">"+deleteLink+"<br></div>"


حالا نوبت نوشتن تابع ()removeInput هستش که کار اون حذف یک ورودی هستش:

function removeInput(spanId) {
    var 
inputObject document.getElementById(spanId);
    var 
targetDiv document.getElementById('inputs');
    
targetDiv.removeChild(inputObject);    


توسط ()removeChild ورودی درونی و خود DIV مورد نظر رو حذف می‌کنیم.

خصیصه‌ی ()innerHTML باعث وارد کردن محتوای دلخواه؛ اعم از متن و تگ‌ها و... به درون تگ مورد اشاره می‌شه.
موفق باشید.

باز هم تشكر بابت اين همه زحمت ، بابت توضيحات بسيار خوب .

انشاءاله شما رو بيشتر زيارت كنيم .
موفق باشيد .
مرجع آدرس ها