PDA

View Full Version : مشکل در انجام محاسبه عددی ساده



ali.poorbazargan
سه شنبه 11 تیر 1392, 09:39 صبح
سلام
من به تازگی برنامه نویسی با JS رو شروع کردم
ولی اولین اسکریپتی که نوشتم جواب مطلوبم را نداد با اینکه هیچ مشکلی در اون نمیبینم .
من میخوام از دو کادر متنی 2 عدد بگیرم و به صورت alarm حاصل جمع رو نمایش بدم .


<script type="text/javascript">


function calc()
{
var a=document.getElementById("aa").value;
var b=document.getElementById("bb").value;
var result= a + b;
alert(result);
}

</script>

که aa و bb ، آیدی دو textbox هست .

mehdi.mousavi
سه شنبه 11 تیر 1392, 10:03 صبح
سلام.
کد شما مشکلی نداره، فقط سوال اینه که این تابع calc از کجا و چگونه Call میشه؟
اگر فرض کنیم که Button ای روی صفحه داریم که با فشردن اون نتیجه نمایش داده بشه، اونوقت می تونیم بدین شکل عمل کنیم:

window.onload = function () {
var getResultBtn = document.getElementById('getResult');
getResultBtn.onclick = function () {
var num1 = document.getElementById('num1').value;
var num2 = document.getElementById('num2').value;

var result = parseInt(num1) + parseInt(num2);
alert(result);
};
};


و فرض کردم HTML مربوطه این باشه:

<input type="text" id="num1" />
<input type="text" id="num2" />
<input type="button" id="getResult" value="Calculate" />

و مقادیر عددی در textbox ها وارد بشه...

موفق باشید.

ali.poorbazargan
سه شنبه 11 تیر 1392, 11:03 صبح
سلام.
کد شما مشکلی نداره، فقط سوال اینه که این تابع calc از کجا و چگونه Call میشه؟
اگر فرض کنیم که Button ای روی صفحه داریم که با فشردن اون نتیجه نمایش داده بشه، اونوقت می تونیم بدین شکل عمل کنیم:

window.onload = function () {
var getResultBtn = document.getElementById('getResult');
getResultBtn.onclick = function () {
var num1 = document.getElementById('num1').value;
var num2 = document.getElementById('num2').value;

var result = parseInt(num1) + parseInt(num2);
alert(result);
};
};


و فرض کردم HTML مربوطه این باشه:

<input type="text" id="num1" />
<input type="text" id="num2" />
<input type="button" id="getResult" value="Calculate" />

و مقادیر عددی در textbox ها وارد بشه...

موفق باشید.


ممنون از کد شما نتیجه گرفتم .
البته فقط از تابع parseInt استفاده کردم . و یک button که به وسیله onclick تابع calc رو صدا کردم .
قبلش متغیرها به صورت string بود و هر دو عدد رو کنار هم چاپ میکرد .
ولی وقتی از این تابع استفاده کردم مشکل حل شد .
فقط سوالم اینه که چرا این عدد به صورت string ذخیره شده بود ؟
و عملکرد تابع parseInt دقیقا چیه ؟ تیدیل string به int ?!

mehdi.mousavi
سه شنبه 11 تیر 1392, 12:59 عصر
سلام.


چرا این عدد به صورت string ذخیره شده بود ؟

وقتی property ی value رو روی HTML Input Element ها Call می کنید، مقدار بازگشتی اون همواره یک string هستش و جمع دو رشته با هم، به معنای چسبوندن دومی به انتهای اولی هستش (به value property در این صفحه (https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) دقت کنید).


عملکرد تابع parseInt دقیقا چیه ؟
این تابع، رشته ورودی رو میگیره و اونو در مبنای تعیین شده به عدد تبدیل می کنه. از اونجاییکه پیاده سازی های مختلف این تابع، پیش فرض های مختلفی رو ممکنه برای پارامتر دوم این تابع در نظر بگیرن، بهتر هستش که همواره اونو خودمون بصورت صریح تعیین کنیم. در واقع، بهتره جای parseInt(num1) بنویسیم: parseInt(num1, 10) که بعدا با مشکل مواجه نشیم. ضمنا، این نکته رو مد نظر داشته باشید که اگر رشته پاس شده به این تابع با صفر شروع بشه، در اون صورت بطور خودکار مبنای مورد استفاده برای تبدیل 8 در نظر گرفته خواهد شد. بنابراین، بهتره در همه موارد پارامتر دوم تابع رو خودمون مشخص کنیم (البته در Strict Mode (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FFunctions_an d_function_scope%2FStrict_mode#Converting_mistakes _into_errors) تغییراتی در این مساله در نظر گرفته شده).

موفق باشید.