الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

عمل عملية حسابية على الradio buttons

بدأه أثين في 18 أغسطس 2010 · 16 رد · 1,334 مشاهدة · في قسم البرمجة بــ Javascript
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله،

انا عضوة جديدة في هذا المنتدى، ولدي استفسار بخصوص الradio button

اود عمل صفحة فيها اسئلة، ولكل سؤال عدة اجوبة (radio buttons) وبعد الانتهاء من الإجابة أود وضع عملية حسابية تحسب مجموع الأجوبة. مع العلم بأن كل radio button له قيمة معينة، فمثلا لو كان السؤال الأول : له 3 أجوبة (أ،ب،ج) أ: له قيمة ب: له قيمة ج: له قيمة. وهكذا لكل الاسئلة، في النهاية اود عمل كود يحسب مجموع الradio button اعتمادا على القيمة المسندة إليه.

أتمنى اكون قد اوضحت السؤال.

#2

ما المقصود بحساب مجموع الـ radio box ؟

هل قيم value عددية وليست نصيّة ؟

<input type='radio' name='someOption' value='10' />

مثل هذا مثلاً، بحيث يقوم بالنهاية بجمع 10 مع باقي القيم ؟؟

تم تعديل هذه المشاركة بواسطة Xacker في 18 أغسطس 2010 في 13:43

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#3

حلقة تكرار تجمع القيم

لكن لي سؤال لم تقوم بعمل النظام يحسب عن طريق الجافا سكريبت ام هل النظام كله جافا سكريبت

بعد التديل

اعتقد انك اسندت لكل اختيار بحسب معرف موجود بقاعدة البيانات قيمة محددة

عند تعاملك مع قواعد البيانات يجب عليك حساب الناتج بطرف السيرفر

ماهي اللغة المستخدمة

تم تعديل هذه المشاركة بواسطة X-File في 18 أغسطس 2010 في 13:59

In bad state

#4

هذه مثال على حسب فهمي للسؤال الذي طرحتيه

sum  =  0;

tags = document.getElementsByTagName('input');

for( i = 0 ; i < tags.length ; i++ )
{
  if( tags.type  === 'radio' && tags.checked === true )
  {
    sum += parseFloat(tags.value) ;
  }
}

alert(sum);

تم تعديل هذه المشاركة بواسطة ahmad123 في 18 أغسطس 2010 في 14:10

2
#5

شكرا على الردود،،

أولا أريد ان اعلمكم بأني درست الجافا سكريبت لكن لي سنين طويلة لم استخدمها لذلك ناسية.

الأخ Xacker

الأجوبة عبارة عن قيم نصية، قيم الـvalue نصية وليست عددية، لكن أريد أن يكون لكل قيمة نصية قيمة عددية سيتم جمع القيم العددية في النهاية.

الأخ X-File

في الحقيقة أنا لم اعمل في البرمجة منذ زمن طويل لذلك أظن الجافا سكريبت سيقوم بالمطلوب، وماعندي فكرة اذا في طريقة أخرى!

قمت بشرح الفكرة في ملف وورد، أرجو الاطلاع عليه ومساعدتي.

الفكرة هي عمل صفحة اختبار يقوم الزائر بالإجابة عن الأسئلة الموجودة وبعد ذلك يتم حساب نتيجة الأسئلة .

أرجو أن اكون أوضحت المطلوب

الأخ ahmad123

شكرا جزيلا،، اتوقع هذا اللي اريده

طبعا هو المفروض ينحط في الـhead السؤال الآن : كيف يتم منادة الـfunction من الbody؟

استفساري.doc

#6

مثال كامل بـ jQuery

<html>
<head>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
</head>
<body>
	<form action='' id='myform'>
	<div>
	<label>Question #1: what is your name?</label><br>
		<input type='radio' name='name' value='Xacker' id='1'>Xacker</input>
		<input type='radio' name='name' value='X-File' id='2'>X-File</input>
		<input type='radio' name='name' value='Ahmed123' id='3'>Ahmed123</input>
	</div>
	<br>
	<div>
	<label>Question #2: how old are you?</label><br>
		<input type='radio' name='age' value='25' id='1'>25</input>
		<input type='radio' name='age' value='15' id='2'>15</input>
		<input type='radio' name='age' value='30' id='3'>30</input>
	</div>
	<input type='submit' name='submit' value='submit' />
	<br><br>
	Sum is: <span id='output'></span>
	</form>
	<script>
		$('#myform').submit(function() {
			var sum = 0;
			$('input[type=radio]:checked').each(function() {
				sum += $(this).attr('id')*1;
			});
			$('#output').text(sum);
			return false;
		});
	</script>
</body>
</html>

تم تعديل هذه المشاركة بواسطة Xacker في 18 أغسطس 2010 في 14:45

1

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#7

هذه مثال للاستخدام :

<script type="type/textjavascript">
function getSum()
{
	sum  =  0;

	tags = document.getElementsByTagName('input');

	for( i = 0 ; i < tags.length ; i++ )
	{
	  if( tags.type  === 'radio' && tags.checked === true )
	  {
		sum += parseFloat(tags.value) ;
	  }
	}

	return sum ; 
}


</script>
<input type="button"  value="Sum" onclick= "alert(getSum());" />
1
#8

اخي Xacker

بالضبط هذا اللي كنت محتاجتنه، الحين أريد أضيف زيادة عليه التالي:

الآن اريد ان أحدد النتيجة اعتمادا على sum

فإذا كانت بين 75-100 تعطيني نتيجة معينة

وإذا كانت بين 50-75 تعطيني نتيجة أخرى

وإكانت أقل من 50 تعطيني كذلك نتيجة

شكرا جزيلا لكم على سرعة الرد

اخي ahmad123

شكرا جزيلا للرد

سأجربه أيضا

#9

@ahmed123:

أخي أحمد، الكود لا يأخذ بعين الاعتبار أن قيمة value يمكن أن تكون نصية وليست عددية.

فهو يعتمد عليها في عملية الجمع.. طبعاً من الممكن تعديله بسهولة.

أثين كتب:

اخي Xacker

بالضبط هذا اللي كنت محتاجتنه، الحين أريد أضيف زيادة عليه التالي:

الآن اريد ان أحدد النتيجة اعتمادا على sum

فإذا كانت بين 75-100 تعطيني نتيجة معينة

وإذا كانت بين 50-75 تعطيني نتيجة أخرى

وإكانت أقل من 50 تعطيني كذلك نتيجة

بسيطة، استبدلي جزء الجافاسكربت بالتالي:

	<script>
		$('#myform').submit(function() {
			var sum = 0;
			$('input[type=radio]:checked').each(function() {
				sum += $(this).attr('id')*1;
			});
			var output;
			if(sum >= 75 && sum <= 100)
				output = 'Excellent';
			else if (sum >= 50 && sum < 75)
				output = 'Good';
			else
				output = 'Poor';
			$('#output').text(output);
			return false;
		});
	</script>

تم تعديل هذه المشاركة بواسطة Xacker في 18 أغسطس 2010 في 15:42 — السبب: استبدال x بـ id

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#10

اشكرك جزيل الشكر

سأجرب الكود الآن

#11

استفسار

ما الفرق بين الـvalue والـ id ؟

#12
أثين كتب:

استفسار

ما الفرق بين الـvalue والـ id ؟

كلاهما attribute للعنصر الذي هو input في هذه الحالة.

value: تعبّر عن القيمة الخاصة بالـ input - قد تكون عددية أو نصيّة لذلك لم أعتمد عليها في تخزين درجة الإجابة.

id: عبارة عن identifier للـ input - يستخدم للوصول إلى العنصر، وأنا هنا استخدمته لتخزين درجة الإجابة - كان بإمكاني كتابة degree بدلاً منه (وذلك حتى لا يتم الخلط بينه وبين الـ id الذي يستخدم في جافاسكربت للحصول على مقبض obj خاص بعنصر ما) والمتصفحات الحديثة ستعتبر degree عبارة عن attribute نظامي دون مشاكل (على الأقل مكتبة jQuery :P).

تم تعديل هذه المشاركة بواسطة Xacker في 18 أغسطس 2010 في 15:40

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#13

هل اذا ضفت اسئلة زيادة على اللي كتبته حظرتك لازم اعدل على السكريبت ؟

ام هي تعمل على عدد لا محدود من الأسئلة؟

اها فهمت الحين

:)

#14
أثين كتب:

هل اذا ضفت اسئلة زيادة على اللي كتبته حظرتك لازم اعدل على السكريبت ؟

ام هي تعمل على عدد لا محدود من الأسئلة؟

عدد لا محدود.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#15

اشكرك

#16

الأخ Xacker

قمت بإضافة عدد من الأسئلة

لكن دائما تعطيني نفس النتيجة (poor) !!

#17

درجات الخيارات التي وضعتها في المثال هي 1, 2, 3 حسب طلبك.

يجب أن يصبح مجموع الدرجات ضمن المجال 50+ حتى تتغير من Poor إلى Good فـ Excellent فإن وضعت بضع أسئلة إضافية فقط لن تكفي للوصول بالمجموع إلى 50.

من ناحية أخرى انتبهي إلى أن لا يتجاوز مجموع الدرجات 100 درجة، لكي تزيلي اللبس استبدلي الشرط الذي كتبته لك سابقاً

if(sum >= 75 && sum <= 100)

بالتالي احترازاً

if(sum >= 75)

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

مواضيع مشابهة