طرز استفاده Inputbox هاي آرايه اي در جاوا اسكريپت ؟!

NabiKAZ

Well-Known Member
سلام

يه سري اعداد داريم كه تعدادشون مشخص نيست و بايد در آرايه ذخيره بشن . و يه طوري تو خروجي html ارسال بشن و با يه كد جاوا اسكريپت اون مقادير رو با هم جمع بزنيم .
1. آيا خاصيت ID از تگ <DIV> ميتونه بصورت آرايه تعريف بشه و مقادير رو توش قرار بديم ؟
اگر جواب مثبته ، چطور ميشه از مقدار اون در جاوا اسكريپت استفاده كرد؟
با فرض اينكه جواب منفي باشه ، ناچار ميشيم از INPUTBOX هاي مخفي استفاده كنيم . كه سوال دوم پيش مياد:
2. يه اينجوري داريم:
HTML:
<input type="text" name="num[1]" size="20">
حالا تو جاوا اسكريپت چطوري ميشه از مقدار عددي كه توي اون قرار داره استفاده كرد . (بصورت آريه ميباشه ها!)

به نظر ساده مياد! اما چند ساعت از وقت منه تازه كار رو ازم گرفته !!!

تشكر
نبي
 
آخرین ویرایش:

mazoolagh

Active Member
اون روش اسم گذاری که استفاده کردی نادرسته. اسم همه input ها رو یکی بگذار مثلا همون num ولی وقتی بهشون ارجاع میدی به شکل num[] باشه
 

NabiKAZ

Well-Known Member
یه سرچ کردم اینو پیدا کردم :
http://www.experts-exchange.com/Web/Web_Languages/JavaScript/Q_20287688.html
ظاهرا دعوا سر همین موضوعه !
آخر سر هم یکی این راهو پیشنهاد داده :
PHP:
  <form>
   <input type="hidden" name="hiddenField" value="">
   <input type="text" name="field[0]" value="a">
   <input type="text" name="field[1]" value="b">
   <input type="text" name="field[2]" value="c">
  </form>

for ( var i=0; i<3; i++ )
 {
    alert( eval("document.forms[0].elements['field[" + i + "]'].value") );
 }

کار هم میکنه ! اما نمیدونم چرا مقدار هر فیلد رو که برمیگردونه با وجود اینکه از eval رد شده اما مثه رشته باهاش برخورد میکنه !! و نمیشه عملیات ریاضی روش انجام داد.
لطفا راهنمایی کنید

نبی
 

NabiKAZ

Well-Known Member
mazoolagh گفت:
اون روش اسم گذاری که استفاده کردی نادرسته. اسم همه input ها رو یکی بگذار مثلا همون num ولی وقتی بهشون ارجاع میدی به شکل num[] باشه

ممنون از جوابت.
اما من تو پي اچ پي هميشه همينجوري اسم گذاري ميكنم مشكلي نبوده . شايد جاوا اسكريپت...!

اگر منظورت اينجوريه :
PHP:
 <form name=FrmMain>
   <input type="hidden" name="max" value="3">
   <input type="text" name="field" value="10">
   <input type="text" name="field" value="20">
   <input type="text" name="field" value="30">
  </form>

 for ( var i=0; i<2; i++ )
  {
     alert(document.max.field[i].value);
  }

كه دقيقا همين راه توي اون لينكي كه بالا گفتم ارائه شده، كه جواب نميده !

اما مشكل راه حلي كه بالاتر نوشتم رو اگر حل كنيد ، مشكل منم حل ميشه.

تشكر
نبي
 

NabiKAZ

Well-Known Member
خداییش این جاوا اسکریپت چقدر بد قلقه و مزخرفه !
شاید واسه اینه که من بلد نیستم ولی خیلی حساسه !
من بلخره موفق شدم چیزی که میخواستم رو از توش در بیارم . با این کد:
PHP:
<form name=MainForm>
  <input type="text" name="field[0]" value="10">
   <input type="text" name="field[1]" value="20">
   <input type="text" name="field[2]" value="30">
   <input type="hidden" name="max" value="3">
</form>

<SCRIPT language=javascript type=text/javascript>
var x=0;
function main () {
 for ( i=0; i<eval(document.MainForm.max.value); i++ )
 {
 x=x+(eval(document.forms["MainForm"].elements["field["+i+"]"].value));
 } 
 alert (x);
}
main();
</SCRIPT>
(کارش جمع 3 تا فیلد که بصورت آرایه ای نام گذاری شدند)
گفتم شاید بدردتون بخوره.
خداییش چندین ساعت وقتم رو گرفت !!!

تشکر
نبی
 

mazoolagh

Active Member
PHP:
	var sum= new Number(0) ;
	for ( var i=0; i<3; i++ ) 
	{ 
		eval("sum += new Number(document.forms[0].elements['field[" + i + "]'].value);") ;
	}
	    alert (sum) ;
 

mazoolagh

Active Member
همون کد خودت رو اصلاح کردم - ولی درستش همونه که باید اسم همه فیلدها رو یکی بذاری - اینطوری با کم و زیاد شدن تعداد فیلدها کدت نیاز به اصلاح نداره و البته مزایای دیگه هم داره!
 

mazoolagh

Active Member
HTML:
<form> 
   <input type="text" name="field" value="4"> 
   <input type="text" name="field" value="5"> 
   <input type="text" name="field" value="6"> 
</form>


PHP:
var sum= new Number(0) ;
var fields = document.getElementsByName("field") ;
for ( var i=0; i<fields.length; i++ ) sum += new Number(fields[i].value) ;
alert (sum) ;
 

NabiKAZ

Well-Known Member
سلام
mazoolagh جان ممنونم . کدت خوب کار کرد.
البته من چون خروجیم با php انجام میشه مشکلی برای نوشتن اندیس ها ندارم. ضمن اینکه بعدا برای ارسال فرم . فیلدها اگر اندیسشون مشخص باشه . راحت تر با php قابل پردازش هستند. و به همین دلیل اگر اندیس ذکر بشه فکر میکنم برای کارم راحت تر باشه .
به هر حال روش شما هم خوب بود.
ممنون
نبی
 

mazoolagh

Active Member
يك سري روشها استاندارد هست (و بعضي وقتها جايگزين هم نداره و يكتاست) و يك سري هم طبق عادت برنامه نويس و در اختيار خودش كه از بين چند راه يكي رو انتخاب كنه. معمولا انتخاب نام بصورت آرايه براي comboهاي با خاصيت multiple انجام ميشه كه اگر درست يادم باشه همين سوال حدود يك ماه پيش همينجا مطرح شده بود.
بهرحال استفاده از هر روشي كه هدف رو بدون مشكل برآورده كنه و برنامه نويس باهاش راحتتر و چم دستش باشه قابل قبوله!
 

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

بالا