اضافه كردن ديناميك تكست فيلد به فرم

bono056

Member
سلام
يه فرم ساده رو فرض كنيد كه 1 تكست فيلد براي گرفتن اطلاعات و اضافه كردن محتويات تكست فيلد به يه بانك اطلاعاتي بعنوان يه ركورد رو داره.
حالا من ميخوام يه لينك يا دكمه پايين اين فرم داشته باشم كه با هر بار كليك كردن يه تكست فيلد به فرمم اضافه بشه و بعد از submit فرم محتويات هركدوم ار تكست فيلدها به عنوان يه ركورد ذخيره بشن.
كسي ميتونه يه سورسي يا كمكي واسه اينكار اينجا بذاره؟
(ترجيحا PHP و Javascript)
 

AliReza26

Active Member
فكر ميكنم منظورت اين باشه :

کد:
<form name=myform method=get>
<input type=text name=ID>
<?php

$i2 = $_GET['ID'];
for($i=0;$i<$i2;$i++){
echo "<input type=text><BR>";
}

?>
<input type=submit value=send >
</form>
 

bono056

Member
نه.
ميخوام با فرمان كاربر اضافه بشن.
بايد client side باشه (با javascript) ولي با PHP مقاديرشون رو بگيرم.
 

mazoolagh

Active Member
اضافه كردن textbox را ميتوان هم در سمت client و هم در سمت server انجام داد فرقش در client side اينه كه post back نميخواد.
من به php تسلط كافي در حد پاسخگويي ندارم ولي با ASP و vbscript خيلي راحت است
 

mazoolagh

Active Member
در clientside بايد از Document.CreateElement براي ساختن Text Box هاي جديد استفاده كني. البته قبل از آن بايد بداني چند تا Text Box از قبل داري كه آنهم بايد با اسكن كردن document براي يك سري tag خاص يا اسم خاص باشد.
براي ارسال به صفحه ASP ميتواني هم از query string با اسامي يكسان استفاده كني و هم form ارسال كني.

اگر تونستم يك نمونه كد ميگذارم.
 

mazoolagh

Active Member
علاوه بر روش document.createelement كه گفتم روش innerhtml رو هم توي كد نمونه پايين گذاشتم. روش دوم در اصل نوعي hack محسوب ميشه كه هر جايي گير كردين و روشهاي متعارف رو نتونستين پياده كنين بدردتون ميخوره

کد:
<html>
<head>
<script language ="vbscript">

public counter
counter=0

sub window_onload
add_new_item
end sub

sub add_new_item
newrow = window.t1.insertRow()
counter=counter+1
newcell = window.t1.rows(counter).insertcell()
newcell = window.t1.rows(counter).insertcell()
window.t1.rows(counter).cells(0).align="center"
window.t1.rows(counter).cells(0).innertext = cstr(counter)
window.t1.rows(counter).cells(1).align="center"
'======== 1st method =======
set fld = document.createElement("input")
fld.type="text"
fld.id="field_" & cstr(counter)
window.t1.rows(counter).cells(1).appendchild(fld)
'======== alternative method =======
'window.t1.rows(counter).cells(1).innerhtml = "<input type='text' id='field_'" & cstr(counter) & ">"
'===================================
end sub

</script>
</head>
<body>
<div align="center">
<input type="button" id="new_row" value="ADD NEW FIELD" onclick="add_new_item">
	<table border="1" width="40%" id="t1" cellspacing="1">
		<tr>
			<td align="center">Item Number</td>
			<td align="center">Data</td>
		</tr>
	</table>
</div>
<div align="center">
</div>
</body>
</html>
 

mazoolagh

Active Member
خواهش ميكنم
فقط خاطرتون باشه كه در برنامه نهايي تون حتما فكري هم براي حذف فيلدها بكنين - به اين صورت كه كنار هرفيلد يك دكمه باشه كه كاربر بتونه با كليك كردن اون فيلد مربوطه را حذف كنه
 

bono056

Member
سلام
ميشه راجع به اون 2 مورد براي ارسال صفحه به ASP بيشتر توضيح بدي؟
من اين خط رو به كد تو اضافه كردم كه به textfield ها علاوه بر id اسم(name) هم ميده.
کد:
fld.name="field_" & cstr(counter)
و براي گرفتن مقدار هم كه:

کد:
Request.Form("field_1")
اما اگه تعداد tf ها مشخص نباشه؟
چيزي تو مايه هاي foreach كه تو php داريم تو asp نيست؟
 

mazoolagh

Active Member
شما چند راه داريد:
1- اگر دفت كرده باشيد در اين صفحه از form استفاده نشده است. ميتوانيد فيلدها را درون يك فرم قرار داده و يك فيلد مخفي هم به آن اضافه كنيد كه تعداد textbox ها را در آن ذخيره كنيد. در صفحه مقصد يك loop تشكيل ميدهيد كه فيلدها را يكي يكي بخواند:

کد:
for i=1 to request.form("count_of_fields")
      x(i) = request.form("field_" & cstr(i))
next

كه راه قشنگي نيست مگر آنكه حتما بدلايلي بخواهيم name فيلدها يكسان نباشد.

2- name همه فيلدها را يكي بگذاريد. در اينصورت لازم نيست از فيلد مخفي استفاده كنيد. چه براي request.form و چه براي request.querystring ميتوانيد از count استفاده كنيد.

بدون استفاده از فرم
کد:
for i = 1 to request.querystring("field_").count
     x(i) = request.querystring("field_")(i)
next


با استفاده از فرم
کد:
for i = 1 to request.form("field_").count
     x(i) = request.form("field_")(i)
next

3- حالا پاسخ سوال اصلي شما:
کد:
i=0
for each fld in request.querystring("field_")
     x(i) = fld
i=i+1
next


ضمنا خاطرتان باشد در برنامه خود بجاي id از name استفاده كنيد چون فرم براي ارسال به name احتياج دارد.
 

bono056

Member
سلام
ميشه معادل javascript اين تابع اضافه كردن تكست فيلد رو هم بذاري؟
 

mazoolagh

Active Member
سعي كنين تا حد امكان از javascript استفاده نكنين مگر جايي كه vbscript جواب نميده! ولي هر دو رو بايد بلد باشين!

کد:
<html> 
<head> 

<script language ="javascript"> 

var counter ;
counter=0 ;

function window.onload() {
v = add_new_item() ;
}

function add_new_item() {
newrow = window.t1.insertRow() ;
counter++ ;
newcell = window.t1.rows(counter).insertCell() ;
newcell = window.t1.rows(counter).insertCell() ;
window.t1.rows[counter].cells(0).align="center" ;
window.t1.rows(counter).cells(0).innerText=counter ;
window.t1.rows(counter).cells(1).align="center" ;
//======== 1st method ======= 
var fld = document.createElement("input") ;
fld.type="text" ;
fld.id="field_" + counter ;
window.t1.rows(counter).cells(1).appendChild(fld) ;
//======== alternative method ======= 
//window.t1.rows(counter).cells(1).innerHTML = "<input type='text' id='field_'" + counter + ">"  ;
//=================================== 
}

</script> 
</head> 
<body> 
<div align="center"> 
<input type="button" id="new_row" value="ADD NEW FIELD" onclick="add_new_item()"> 
   <table border="1" width="40%" id="t1" cellspacing="1"> 
      <tr> 
         <td align="center">Item Number</td> 
         <td align="center">Data</td> 
      </tr> 
   </table> 
</div> 
<div align="center"> 
</div> 
</body> 
</html>
 

bono056

Member
سلام
مرسي
چرا VBScript؟
من واسه اين ميخواستم javascript استفاده كنم چون صفحاتم اولا با PHP است. دوما تو صفحاتم تابع هاي validator , ... جاوا اسكريپته و نميخواستم صفحم 2 زبونه بشه. ضمن اينكه فكر كنم جاوااسكريپت عمومي تر باشه.
اشتباه فكر ميكنم؟
 

mazoolagh

Active Member
اين موضوع تا حد زيادي سليقه اي و عادت هست. شخصا تا مجبور نشم سراغ java نميرم بيشتر بدليل case sensivity و اينكه تا مشتري ازم نخواد از اين جلوه هاي ويژه و عروس بازي تو صفحات نميذارم. ضمنا نميدونستم شما php كار ميكني. بايد وقت بذارم php هم ياد بگيرم ...
 

جدیدترین ارسال ها

بالا