article

توابع (Functions) در جاوا اسکریپت (JavaScript)

javascript-function

در اغلب زبان های برنامه نویسی توابع (Functions) نقش کلیدی در پیش برد اهداف برنامه نویس و تسهیل روند کدنویسی دارند، توابع مانند ماشین هایی هستند که هر بار با توجه به مواد اولیه ورودی خروجی متفاوتی تولید می کنند، خوشبختانه اصول کلی این مبحث در جاوا اسکریپت (JavaScript) شباهت زیادی به دیگر زبان خانواده برنامه نویسی وب یعنی PHP دارد، این موضوع باعث می شود کاربرانی که دوره جاوا اسکریپت را پشت سر می گذارند با فهم این مبحث در PHP نیز مشکلی نداشته باشند یا در حالت برعکس اگر با PHP آشنا باشیم به راحتی بخش توابع در جاوا اسکریپت را فرا خواهیم گرفت هر چند بهتر است ابتدا زبان های سمت کاربر را یاد بگیریم و سپس به بررسی برنامه نویسی سمت سرور بپردازیم، به هر صورت در ادامه آموزش های مقدماتی جاوا اسکریپت این بار به سراغ بحث توابع رفته ایم.

تابع چیست و چه کاربردی دارد؟


اولین سوالی که ممکن است به ذهنمان برسد این است که اصلا تابع چیست و چه کاربردی دارد؟!
پاسخ این است که در برنامه نویسی توابع یا Functions شبیه ماشین ها در دنیای واقعی هستند که با دستورالعمل ثابت هر بار با توجه به ورودی دریافتی خروجی متفاوتی تولید می کنند، توابع با این هدف در زبان های برنامه نویسی معرفی شده اند تا از چندبارنویسی عملیات های مشابه جلوگیری شود، به طور مثال نرم افزار نصب شده بر روی دستگاه چاپ را در دنیای واقعی تصور کنیم اگر بخواهیم 100 برگ کاغذ را با نوشته های مختلف بدون کمک نرم افزار و به صورت تنظیمات دستی پرینت کنیم قاعدتا زمان بسیار زیادی از ما خواهد گرفت، اما کافی است یک بار برای سخت افزار دستگاه برنامه بنویسیم و هر بار با توجه به تنظیمات مدنظرمان به هر تعداد که می خواهیم خروجی بگیریم، عملکرد توابع در دنیای برنامه نویسی هم بی شباهت به این مثال نیست، در برنامه نویسی شرایطی پیش می آید که یک روند به تعداد خیلی زیاد ممکن است تکرار شود، به طور مثال تنظیم فونت دلخواه در صفحات مختلف، اگر بخواهیم هر بار تمام جزئیات را مورد به مورد برای هر صفحه بنویسیم علاوه بر اینکه این کار وقت زیادی از ما می گیرد باعث افزایش ضریب خطا و حجم کلی کدنویسی صفحات خواهد شد، از این رو روش بهتر و حرفه ای تر آن است که یک بار الگویی را به شکل تابع بنویسیم و هر بار با ورودی های متفاوت (یا مشابه) خروجی مدنظرمان را دریافت کنیم.

شیوه نگارش (Syntax) توابع در جاوا اسکریپت


توابع در جاوا اسکریپت (JavaScript) با عبارت function تعریف و معمولا پارامترهایی به عنوان آرگیومنت (Argument) می پذیرند، آرگیومنت به زبان ساده یعنی همان ورودی هایی که به تابع داده می شود و می تواند از نوع عدد، رشته، آرایه، تابع و... باشد، مثال زیر Syntax صحیح نحوه تعریف یک تابع ساده را در جاوا اسکریپت نشان می دهد:
<script>
function userInfo(u, c){
    var user = 'your username: ' + u + '<br>';
    var country = 'your country: ' + c + '<br>';
    var output = user + country;
    
    return output;
}
document.write(userInfo('admin', 'Iran'));
</script>
توضیح:
- برای تعریف تابع در جاوا اسکریپت از عبارت function استفاده می کنیم.
- نام تابع باید با حروف انگلیسی (یا کاراکترهای _ و $) شروع شود و استفاده از اعداد به عنوان شروع تابع صحیح نیست اما می توانیم در ادامه از اعداد استفاده کنیم به فرض user1Info یا u123_info، دقت کنیم استفاده از کلماتی که به عنوان دستورات خاص در جاوا اسکریپت کاربرد دارند (به فرض var، if، default و...) مجاز نیست، برنامه نویسان برای خواناتر شدن کدها از عبارت های دارای معنی و معمولا به صورت کلمات چندبخشی (به فرض userInfo) استفاده می کنند.
- در نمونه تابع بالا دو آرگیومنت فرضی (u و c) به عنوان نام کاربری و کشور در ورودی دریافت می شود، در نظر گرفتن آرگیومنت برای تابع اجباری نیست و بسته به نیاز برنامه ممکن است تابع با یا بدون آرگیومنت نوشته شود.
- سپس درون تابع (بین کاراکترهای {}) سه متغیر با نام های دلخواه username، country و output تعریف شده که در واقع نهایتا خروجی به صورت
your username: admin
your country: Iran
برگردانده شده و در بیرون از تابع چاپ می شود.
- در قسمت return خروجی تابع ارسال می شود، در اینجا return متغیر output را که خود حاصل جمع دو متغیر name و country است به عنوان خروجی تابع برمی گرداند (به ارسال خروجی تابع در اصطلاح برگردان یا return می گویند)، استفاده از دستور return در تابع اجباری نیست و بسته به نوع تابع و عملیاتی که مد نظر است می توانیم از این دستور استفاده کنیم (معمولا توابع به همراه قسمت return تعریف می شوند).
نکته: در صورتی که در هر قسمت از تابع دستور return اجرا شود، ادامه پردازش کدهای آن (در صورت وجود) متوقف شده و عملیات تابع به پایان می رسد.
- دقت کنیم توابع در جاوا اسکریپت باید حتما با یک دستور یا رویداد فراخوانی شوند به طور مثال بارگذاری کامل صفحه (رویداد onload) یا کلیک کاربر بر روی یک دکمه (رویداد onclick) و...، در حالت عادی صرف وجود یک تابع در صفحه به خودی خود کار خاصی انجام نمی دهد، در مثال بالا فراخوانی تابع با دستور document.write انجام شده که نتیجه را در صفحه وب چاپ می کند.

روش های تعریف تابع در جاوا اسکریپت


همان طور که گفتیم تابع در جاوا اسکریپت (JavaScript) با عبارت function تعریف می شود اما روش های تعریف می تواند بسته به موقعیت و نیاز برنامه متفاوت باشد:
- تعریف تابع به صورت معمول
در این حالت تابع به صورت معمول و با در نظر گرفتن نام اختصاصی تعریف می شود، مثال:
<script>
function addNumbers(num_1, num_2, num_3){
    return num_1 + num_2 + num_3;
}
alert(addNumbers(8, 5, 7));
</script>
با درج این کد در صفحه HTML و اجرای فایل در مرورگر تابع addNumbers فراخوانی و خروجی زیر به صورت پیام هشدار نمایش داده می شود:
20
در این روش تابع به صورت معمول و مستقل تعریف شده است، دقت کنیم استفاده از عبارت addNumbers برای تعریف توابع دیگر در همان صفحه وب ممکن است نتایج ناخواسته در پی داشته باشد و در صورتی که دو تابع هم نام در یک اجرا داشته باشیم مفسر جاوا اسکریپت صرفا آخرین تابع را پردازش می کند.
- تعریف تابع با متغیر
یک روش دیگر تعریف تابع در نظر گرفتن نام به صورت متغیر است، مثال:
<script>
var myFunc;
//var num = 'JS';
var num = 20;
var result;

if(Number.isInteger(num)){
    myFunc = function(num){
        result = num - 5;
        return result;
    }
} else{
    myFunc = function(num){
        result = 'Error! Please Use Integer.';
        return result;
    }
}

alert(myFunc(num));
</script>
در این شیوه فرآیندی که تابع باید اجرا کند ابتدا با دستور شرطی (متد Number.isInteger) ارزیابی و سپس تابع تعریف می شود، با توجه به این نمونه کد اگر ورودی (متغیر فرضی num) برابر مقدار عددی باشد، قسمت اول شرط if اجرا و خروجی به صورت عدد زیر نمایش داده می شود:
15
اما اگر ورودی مقدار غیر عددی باشد (به فرض عبارت JS) خروجی به صورت زیر نمایش داده می شود:
Error! Please Use Integer.
دقت کنیم حتی اگر مقدار عددی را بین علامت های '' در متغیر num قرار دهیم (به فرض '10') در حالت عادی از دید مفسر جاوا اسکریپت مقدار درج شده رشته ای (String) است نه عددی (Integer) و پیام خطا نمایش داده خواهد شد.
- تعریف تابع در تابع دیگر
گاهی مواقع در برنامه نویسی موقعیت هایی پیش می آید که ممکن است به جهت ساختار کدها یا مختصرنویسی و پرهیز از کدنویسی مجزا برای انجام فرآیندهای تکراری نیاز به تعریف تابع در تابع دیگری باشد، مثال:
<script>
function addNumbers(num_1, num_2, num_3){
    var result = num_1 + num_2 + num_3;
    
    function showAlert(){
        alert(result);
    }
    
    return showAlert();
}

addNumbers(1, 5, 7);
</script>
خروجی نمونه کد بالا به صورت پیام هشدار نمایش داده می شود:
13
نکته مهم در این شیوه حدود (Scope) دسترسی به تابع درونی است که فقط در تابع اصلی قابل فراخوانی و استفاده است، به عبارت دیگر در نمونه کد بالا نمی توانیم تابع showAlert را در بیرون از تابع addNumbers فراخوانی کنیم.

حدود دسترسی تابع (Function Scope) در جاوا اسکریپت


منظور از حدود دسترسی یا Scope، وجود یا عدم وجود قابلیت استفاده از پارامترهای تابع (متغیر، تابع، آبجکت و..) در بیرون از تابع یا پارامترهای بیرون از تابع در تابع برای مفسر جاوا اسکریپت در زمان پردازش دستورات است، طبق قوانین زبان جاوا اسکریپت:
- هر متغیر، تابع یا آبجکتی که درون یک تابع تعریف می شود صرفا توسط همان تابع (یا تابعی که درون آن تابع تعریف شده باشد) قابل دسترس است، به طور مثال کد زیر خطا خواهد داشت:
<script>
function myScope_1(){
    var txt = 'Hello!';
}
function myScope_2(){
    return txt;
}
alert(myScope_2());
</script>
چون متغیر فرضی txt در تابع myScope_1 تعریف اما در تابع myScope_2 فراخوانی شده است با اجرای کدها مفسر جاوا اسکریپت خطای زیر را برمی گرداند:
ReferenceError: txt is not defined
بر طبق همین قانون کد زیر صحیح است و خطایی نخواهد داشت:
<script>
function myScope_1(){
    var txt = 'Hello!';
    
    function myScope_2(){
        return txt;
    }
    
    return myScope_2();
}

alert(myScope_1());
</script>
تابع myScope_2 درون تابع myScope_1 تعریف شده و به پارامترهای آن دسترسی دارد، نتیجه اجرای نمونه کد بالا پیام زیر خواهد بود:
Hello!
- متغیرهایی که بیرون از تابع به صورت دسترسی سراسری (Global Scope) تعریف شوند در تابع قابل استفاده و تغییر هستند، مثال:
<script>
var txt;
function myScope_1(){
    txt = 'Hello!';
}
function myScope_2(){
    return txt;
}
myScope_1();
alert(myScope_2());
</script>
متغیر txt در بیرون از توابع تعریف شده و در این حالت دسترسی سراسری یا Global Scope دارد، نتیجه اجرای نمونه کد بالا پیام زیر خواهد بود:
Hello!
نکته: همان طور که در نمونه کد بالا مشخص است متغیرهایی که به صورت سراسری تعریف می شوند در روند اجرای دستورات توسط توابع مختلف قابل تغییر هستند، در اینجا متغیر txt در بیرون از توابع تعریف، در تابع myScope_1 مقداردهی و در تابع myScope_2 فراخوانی شده است.
- توابعی که به صورت مستقل تعریف می شوند دسترسی سراسری Global Scope دارند و می توانیم از آنها در سایر توابع استفاده کنیم، مثال:
<script>
function myScope_1(){
    var txt = myScope_2('Welcome');
    return txt;
}
function myScope_2(str){
    return str + '!';
}
alert(myScope_1());
</script>
نتیجه کد بالا به صورت پیام هشدار و متن زیر نمایش داده می شود:
Welcome!
همان طور که مشخص است از تابع myScope_2 در تابع myScope_1 استفاده کرده ایم.

تابع بازگشتی (Recursive Function) در جاوا اسکریپت


توابع در جاوا اسکریپت این قابلیت را دارند که بسته به نیاز برنامه خودشان را فراخوانی کنند، به این حالت در اصطلاح تابع بازگشتی یا Recursive Function گفته می شود، مثال:
<script>
var num = 0;
function recurFunc(){
    if(num > 10){
        alert(num);
        return true;
    }
    
    num++;
    recurFunc();
}
recurFunc();
</script>
با اجرای این تابع تا زمانی که متغیر num کوچکتر یا مساوی با 10 باشد تابع مقدار متغیر را یک واحد افزایش و مجددا خودش را فراخوانی می کند، برای جلوگیری از دور تکرار بینهایت (infinite loop) تابع باید در مرحله ای خاتمه یابد، این خاتمه معمولا با در نظر گرفتن دستور شرطی (در اینجا if) انجام می شود و با اجرای دستور return دور تکرار خاتمه می یابد (مشابه با عملکرد دستور break در حلقه ها)، بر این اساس نتیجه تابع بالا به صورت زیر خواهد بود:
11
توابع بازگشتی ساز و کاری مشابه حلقه ها (for، while) دارند و با توجه به نیاز برنامه استفاده می شوند.

نحوه فراخوانی توابع در جاوا اسکریپت


توابع در جاوا اسکریپت بدون وجود رویدادها و دستورات کاربردی ندارند، یک رویداد یا دستور به معنی حالتی است که پس از وقوع یا اعمال آن موتور تابع به حرکت می افتد درست شبیه به استارت زدن یک خودرو!
اگرچه به صرف درج تابع در تگ های script می توانیم تابع را فراخوانی کنیم (مانند نمونه کدهای بالا) اما معمولا فراخوانی توابع در جاوا اسکریپت با رویدادها انجام می شود، در مثال زیر شیوه فراخوانی یک تابع را با دو رویداد پرکاربرد onclick (زمانی که کاربر بر روی یک عنصر کلیک می کند) و onload (زمانی که صفحه وب به صورت کامل بارگذاری می شود) بررسی می کنیم:
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | فراخواني تابع در جاوا اسکريپت با رويداد onclick</title>
<!-- Webgoo.ir -->
<style>
body {
    font-family: Tahoma, Geneva, sans-serif;
    font-size: 12px;
    direction: rtl;
    line-height: 22px;    
}
a {
    text-decoration: none;
}
</style>
</head>
<body>
<script>
function addNum(num1, num2){
    var elm = document.getElementById('result');
    var output = num1 + num2;
    
    return elm.innerHTML = output;
}
</script>
<noscript>جاوا اسکريپت در مرورگر شما غير فعال است يا پشتيباني نمي شود!</noscript>
<a href="#" onclick="addNum(3, 6);">براي مشاهده نحوه عملکرد تابع در جاوا اسکريپت، کليک کنيد</a>
<div id="result"></div>
</body>
</html>
توضیح:
- تابع بالا با رویداد onclick (کلیک کاربر بر روی لینک) اجرا می شود.
- دقت کنیم در جاوا اسکریپت نحوه تعیین مقادیر در نوع رفتار تابع اثرگذار است، به فرض اگر کد بالا را به صورت زیر فراخوانی کنیم به جای جمع دو عدد، حاصل ترکیب آنها به صورت یک رشته نمایش داده می شود:
//نمایش نتیجه به صورت یک رشته متنی
onclick="addNum('3', '6');"
//نمایش نتیجه به صورت حاصل جمع دو عدد
onclick="addNum(3, 6);"
دلیل این حالت استفاده از عملگر جمع (+) در تابع جاوا اسکریپتی است که هم برای مقادیر رشته ای (String) کاربرد دارد و هم مقادیر عددی (Integer).
- در این نمونه کد از متدهای document.getElementById و innerHTML استفاده شده است که در آموزش های پیش رو به صورت جداگانه در رابطه با آنها خواهیم گفت، فعلا در این حد بدانیم که با متد document.getElementById یک عنصر در صفحه انتخاب و با متد innerHTML مقادیر (کدهای HTML + متن) به عنصر مد نظر اضافه می شود.
در ادامه تابع دیگری را در رویداد onload (بارگذاری کامل صفحه) فراخوانی و با پیش نمایش آنلاین بررسی می کنیم.

پیش نمایش آنلاین


در نمونه کد زیر از رویداد onload (بارگذاری کامل صفحه) برای فراخوانی تابع استفاده کرده ایم که لینک پیش نمایش آنلاین آن نیز جهت بررسی درج شده است:
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | فراخواني تابع در جاوا اسکريپت با رويداد onload</title>
<!-- Webgoo.ir -->
<style>
body {
    font-family: Tahoma, Geneva, sans-serif;
    font-size: 12px;
    direction: rtl;
    line-height: 22px;    
}
a {
    text-decoration: none;
}
</style>
</head>
<body>
<noscript>جاوا اسکريپت در مرورگر شما غير فعال است يا پشتيباني نمي شود!</noscript>
با بارگذاری کامل صفحه رویداد onload اجرا شده و تابع welcome فراخوانی می شود.
<script>
function welcome(){
    var text = 'این پیام با فراخوانی تابع در جاوا اسکریپت نمایش داده می شود';
    var output = alert(text);
    
    return output;
}

window.onload = welcome();
</script>
</body>
</html>
پیش نمایش آنلاین
در این نمونه کد هیچ آرگیومنتی برای تابع در نظر نگرفته ایم، قبلا گفتیم که در نظر گرفتن آرگیومنت برای تابع اختیاری است و بستگی به نیاز برنامه دارد.
نکته: استفاده از رویداد onload معمولا می تواند به یکی از شیوه های زیر باشد:
- فراخوانی در تگ body، مثال:
<body onload="welcome();">
- فراخوانی با آبجکت window، مثال:
window.onload = welcome();
نتیجه هر دو روش یکسان است و تفاوت صرفا در شرایطی است که نتوانیم (به دلیل ساختار برنامه) یا نخواهیم (سلیقه برنامه نویس) از یک شیوه استفاده کنیم.
نکته: رویدادها در جاوا اسکریپت تنوع زیادی دارند و محدود به موارد گفته شده (onclick و onload) نمی شوند، در مباحث پیش رو از بخش آموزش های مقدماتی جاوا اسکریپت به صورت مفصل در این خصوص صحبت خواهیم کرد.
sectionدسته بندی: آموزش مقدماتی » JavaScript
related مطالب بیشتر:
» تعریف و استفاده از متغیر (Variable) در جاوا اسکریپت (JavaScript)
» دستور switch و case در جاوا اسکریپت (JavaScript)
» شروعی بر برنامه نویسی جاوا اسکریپت (JavaScript)
» عملگرها (Operators) در جاوا اسکریپت (JavaScript)
» کار با پنجره Pop-up در جاوا اسکریپت (JavaScript)
commentنظرات (۵۲ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: حسام
۲۰:۱۷ ۱۳۹۵/۰۳/۱۴
باعرض سلام و خسته نباشید
میخواستم بدونم چه جوری میشه بین دوتا فیلد با انتخوب اون ها مقداری درشون قرار بگیره مثلا در کد زیر :
<input type="text" readonly>
<input type="text" readonly>
<input type="button" value="1">
هر فیلدی که با موس انتخاب شد عدد یک درونش قرار بگیره .
باتشکر
پاسخ: 
برای این کار باید تابع جاوا اسکریپتی تعریف کنید و آن را با یک رویداد فراخوانی نمائید، مثال:
<script>
function setValue(target, id){
var taget_elm = document.getElementById(target);
document.getElementById(id).value = taget_elm.value;
}
</script>
<input type="text" id="input-1" onclick="setValue('input-3', this.id);" readonly>
<input type="text" id="input-2" onclick="setValue('input-3', this.id);" readonly>
<input type="button" id="input-3" value="1">
نویسنده: علی
۰۱:۳۶ ۱۳۹۵/۰۳/۱۶
سلام خسته نباشید
چطوری با جاوااسکریپت select با چند option رو میشه نوشت ؟
پاسخ: 
نمونه کد زیر گویا است:
http://jsfiddle.net/4pwvg
نویسنده: علی
۱۴:۴۰ ۱۳۹۵/۰۴/۰۲
با سلام
ممنون بخاطر اموزش های بسیار مفیدتان
فقط یه سوال میخواستم بدونم کدی هست که شبیه
onload
باشه با این تفاوت که اگر حتما صفحه لود شد توابعش اجرا بشه.
مثلا اگر کاربر لود صفحه رو متوقف کرد توابع یا کدهای اون اجرا نشه یا کدی که مثلا کاربر صفحه رو متوقف کرد یه خطایی بده مثل
alert("")
اگه یه همچین کدی بهم معرفی کنین ممنون میشم.
بازم ممنون از سایت خوبتون
پاسخ: 
رویداد onload به صورت از پیش تعریف شده در مفسر جاوا اسکریپت وجود دارد و معمولا ضرورتی به استفاده از شیوه دیگری احساس نمی شود، این رویداد به چند شیوه قابل اعمال است، از جمله استفاده در تگ body، مثال:
<body onload="yourFunc()">
استفاده به صورت متد window.onload، مثال:
window.onload = function() {
//your function code
}
و یا استفاده از addEventListener، مثال:
//Everything but IE
window.addEventListener("load", function() {
// loaded
}, false);
//IE
window.attachEvent("onload", function() {
// loaded
});
در قریب به اتفاق موارد استفاده از یکی از این شیوه ها کفایت می کند، همچنین در صورت نیاز به اجرای کدی پس از بارگذاری صفحه، یک راه حل دیگر این است که تابع مربوطه در انتهای کدها قرار گیرد!
نویسنده: محسن(مبتدی)
۱۷:۱۱ ۱۳۹۵/۰۵/۱۲
سلام استاد وقت بخیر خوب تو این مطلب و مطلب قبلی شما چند تابع رو معرفی کردید میخواستم بدونم توابع دیگری هم در جاوا اسکرپت وجود داره ما با اونها آشنا شیم؟ اگر وجود داره و شما مثال نزدید در وبسایت ما باید از کجا فهرست این توابع رو تهیه کنیم......... امیدوارم گنگ و نامفهوم سوال نکرده باشم
پاسخ: 
متدهای پرکاربرد در جاوا اسکریپت عموما محدود به موارد بخصوصی هستند که بیشتر منابع صرفا در خصوص آنها توضیح داده اند و موارد دیگر بر حسب نیاز، با شرایط مشابه قابل رجوع و استفاده هستند، در لینک زیر لیست تقریبا جامعی از متدها و توابع درونی مفسر جاوا اسکریپت ارائه شده که برای کسب اطلاعات بیشتر مفید خواهد بود:
http://www.tutorialspoint.com/javascript/javascript_builtin_functions.htm
نویسنده: محمد حسن نجاری
۱۳:۱۴ ۱۳۹۵/۰۸/۱۳
با سلام و خسته نباشید:
ببخشید در طی روند اموزش جاوا اسکریپت و جی کوئری به این تابع برخوردم
Function(index,currentvalue)
میشه این تابع و توضیح بدید ممنون.
پاسخ: 
این تابع که به آن anonymous یا بی نام گفته می شود برای تنظیم یک تابع به عنوان آرگیومنت در متدهای مختلف از جمله each و... در جی کئوری استفاده می شود، با این تابع می توان شماره عنصر فعلی و مقدار آن را در این نوع متدها (که به صورت حلقه هستند) به متد نسبت داد، درک کامل این مبحث نیازمند آموزش های مقدماتی جی کئوری است که موضوع مطلب حاضر نیست!
نویسنده: مهسا
۱۷:۲۶ ۱۳۹۵/۰۹/۰۷
با عرض سلام. میخواهم در یک combobox مربوط به شعب یک رستوران، با انتخاب یک شعبه غذاهای مرتبط به آن شعبه از پایگاه خوانده شود و نمایش داده شود. حال تابع مربوط به این کار چیست؟ با تشکر فراوان
پاسخ: 
برای این منظور باید با Ajax و PHP آشنا باشید، نمونه در بخش آموزش های مقدماتی و کاربردی Ajax، در همین سایت وجود دارد!
نویسنده: غریب
۰۴:۵۹ ۱۳۹۵/۱۰/۰۸
سلام
میخواستم ببینم چطور میتونم با استفاده از این فایلی که براتون میگذارم جلوی اجرای یک فایل ارجاعی رو در موبایل بگیرم
http://www.gap8.ir/wp-content/8gap/444.txt
فرض کنید میخوام فایل زیر رو
<script src="http://sait.ir/php/plusone.php"></script>
در مواردی که در کد مشخص شده بلوک کنم
چجوری قرارش بدم ممنون میشم اگه کدش رو برام بگذارید
پاسخ: 
سوالتان مبهم است! فایل شامل یک تابع است، اما اینکه منظور از مسدود کردن فایل با این تابع چه باشد، مشخص نیست! آیا فایل در سرور شما اجرا می شود؟؟ آیا فایل توسط کاربر آپلود می شود؟؟ در هر صورت بهترین کار استفاده از PHP (یا هر زبان سمت سرور دیگر) است که با بررسی پسوند فایل و MIME و همچنین بررسی User Agent (واسط کاربری) این کار را دقیقتر انجام می دهند.
نویسنده: غریب
۰۴:۳۰ ۱۳۹۵/۱۰/۱۷
سلام مجدد
خوب استاد کد پی اچ پی ای دارید که در نسخه موبایل بارگذاری یک فایل ارجاعی رو مسدود کنه
من هرجا هم رفتم هیچ کس واقعا کاری نمیکنه فقط اونقدر پیچیدش میکنن که منصرف بشه ادم همیشه تئوری میگند بدون اینکه عملا بخوان واقعا کمکی کنند
این فایل رو هم یکی از دوستان دادند
کاش بجای معما پاسخ رو میدادند برای ماها که مهارت چندانی نداریم
پاسخ: 
هرچند هنوز منظور از "فایل ارجاعی در نسخه موبایل" را مشخص نکرده اید، اما در کل چنین کدهایی باید با برنامه نویسی و به دقت نوشته شوند، یعنی باید برای آن به اندازه کافی زمان صرف شود! به همین دلیل است که در پاسخ به این نوع سوالات به توضیح کلیات بسنده می شود چون قاعدتا امکان اینکه کل برنامه نوشته شود، برای پاسخ دهنده وجود ندارد!
نویسنده: حسین
۱۷:۳۸ ۱۳۹۶/۰۴/۲۶
سلام خسته نباشید. خدا خیرتون بده.. سایت خوبی دارید .. بنده زیاد قوی نیستم توی جاوا اسکریپت یه سوالی داشتم.. اینکه یک کدی میخوام بهم معرفی کنید که با اون بشه فانکشنی ساخت که یک کادر یا پنجره به جز alert درون خود همون صفحه درون مرورگر باز شه یه چیزی مثل تکس باکس .. نمیدونم از سایت دیجی کالا دیدن کردید یا نه توی قسمت های توضیحات درباره کالا ، عبارت هایی مثل 3D و ... رو براش فانکشن ساختن که توضیحات بیشتری درباره اون عبارت میده. که خیلی زیباست ... من یه چیزی میخوام کار اونو انجام بده ، البته نه دقیقا خود اون.. کسیم نیست ازش بپرسم لطفا کمک کنید...
پاسخ: 
این موارد به صورت ترکیبی طراحی می شوند، یعنی ترکیبی از CSS، JavaScript و Ajax، اگر بخواهیم یک نمونه کد ارائه کنیم می توانید به آدرس های زیر مراجعه نمائید:
http://wpandsuch.com/how-to-create-a-popup-with-css-and-javascript/

https://www.w3schools.com/howto/howto_css_modals.asp

https://stackoverflow.com/questions/35785997/custom-popup-window
البته تنها در صورتی که یک برنامه نویس حرفه ای وب باشید می توانید امکانات مورد نیاز دیگر مانند قابلیت انتخاب عکس ها به صورت منو و... را تعریف کنید در غیر اینصورت باید به کدهای آماده موجود اکتفا نمائید.
نویسنده: ایمان
۱۸:۳۲ ۱۳۹۶/۰۹/۰۴
سلام ! من چند تا تابع نوشتم حالا میخوام این توابع به صورت رندم اجرا بشوند . ممکنه راهنمایی کنید
پاسخ: 
نام توابع را مطابق با نمونه کد زیر به آرایه بدهید و به صورت تصادفی یک تابع را فراخوانی کنید:
<script>
function func1(){
alert(1);
}
function func2(){
alert(2);
}
function func3(){
alert(3);
}
var array = [func1, func2, func3],
rand = Math.floor(Math.random() * array.length),
randomFunction = array[rand];
randomFunction();
</script>
نویسنده: بهار
۱۱:۱۰ ۱۳۹۶/۱۱/۲۳
سلام
نوشتن
<!--  -->
قبل از تعریف تابع در جاوا اسکریپت چه فایده ای دارد؟
در واقع چرا تابع را در جاوااسکریپت در محدوده این علامت می نویسند؟
پاسخ: 
استفاده از علامت کامنت HTML برای کدهای جاوا اسکریپت به این دلیل است که برخی مرورگرهای قدیمی که تگ script را پشتیبانی نمی کنند، کدهای جاوا اسکریپت را به اشتباه به خروجی ارسال نکنند و برای کاربر نمایش ندهند، در حال حاضر استفاده از این روش ضرورت خاصی ندارد چرا که تمام مرورگرها از تگ script پشتیبانی می کنند، برای صفحاتی که به صورت XHTML هستند نیز می توانیم از روش
//<![CDATA[ //]]>
استفاده کنیم تا در هنگام اعتبارسنجی در سرویس هایی مانند validator.w3.org با مشکل مواجه نشویم.
نویسنده: Hero90
۱۹:۳۶ ۱۳۹۷/۱۱/۲۷
سلام اگه بخوایم ربات جواب سلاممون رو بده باید چی اضافه کنیم مثلا بگیم سلام رباته بگه سلام عزیزم
پاسخ: 
به این سادگی ها نیست! ابتدا باید با توجه به زبان مورد نظر آموزش های مقدماتی را فرا بگیرید، به طور مثال مباحثی مانند دستورات شرطی.
نویسنده: دریا
۱۸:۵۱ ۱۳۹۷/۱۲/۰۲
ببخشید برای درست کردن جدول با توجه به عددی که در text وارد میکنیم با متد انکلیک باید چکار کنیم
پاسخ: 
برای ساخت جدول با جاوا اسکریپت حالت های مختلفی متصور است به همین دلیل بهتر است متدهای مربوطه را از اصول مقدماتی فرا بگیرید تا ویرایش دلخواه مثال زیر ممکن باشد:
<script>
function makeTable(div, input) {
var table_div = document.getElementById(div);
var table_input = document.getElementById(input);
var table_value = table_input.value;

var table_tag = document.createElement('TABLE');
table_tag.border = '1';

var table_body = document.createElement('TBODY');
table_tag.appendChild(table_body);

for(var r = 1; r <= table_value; r++) {
var tr = document.createElement('TR');
table_body.appendChild(tr);

for(var d = 1; d <= table_value; d++) {
var td = document.createElement('TD');
td.width = '100';
td.appendChild(document.createTextNode("Cell " + r + "," + d));
tr.appendChild(td);
}
}

table_div.appendChild(table_tag);
}
</script>
<div id="div-test"></div>

<label for="input-test">Table Cells:</label>
<input id="input-test" type="text">

<input type="button" value="Make Table!" onclick="makeTable('div-test', 'input-test');">
نویسنده: وحید پوربشیری
۱۱:۱۲ ۱۳۹۸/۱۱/۰۲
سلام لطفا یکی که خوب جاوا اسکریپت بلده بیاد به این آیدی ت.ل.گ.ر.ا.م Alpha2020@
یه کد برام بنویسه پول هم میدم
نویسنده: پیمان نقی پور
۱۸:۲۱ ۱۳۹۸/۱۲/۰۵
سلام
میخواستم بدونم فیلتر نویسی بورس هم با همین زبان جاوا انجام میشه؟
چطور میشه شرطی تعیین کرد تا نتیجه فیلتر در هنگام نمایش تغییر رنگ بده
پاسخ: 
سوالتان کلی است و پاسخ کوتاهی ندارد!، سیستم های تحت وب معمولا به صورت ترکیبی (زبان های سمت سرور مانند PHP و زبان های سمت کاربر مانند JavaScript) نوشه می شوند، معمولا اطلاعات اصلی در روی سرور و در دیتابیس نگهداری می شود، با ارسال درخواست از جانب کاربر برنامه سرور متناسب با هدف برنامه نویس نتیجه را به صورت کدهای HTML و متن تولید کرده و به عنوان پاسخ به مرورگر می دهد، در سمت مرورگر نیز می توانیم یک سری تنظیمات مانند چینش یا تغییر رنگ و... را به صورت موقت انجام دهیم یا برای ثبت همیشگی تغییرات پارامترها را به سرور ارسال و در دیتابیس ذخیره کنیم، در کل درک این فعل و انفعالات نیازمند آشنایی با برنامه نویسی وب از سطوح مقدماتی است.
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- موارد غیرمرتبط با مباحث آموزش ها را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ مختصر داده خواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- از درج عناوین تبلیغاتی در فیلدها خودداری کنید، در صورتی که یادداشت تبلیغاتی تشخیص داده شود حذف خواهد شد.
- تمام یادداشت ها بررسی و زمانی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد خودداری کنید.





2 × 8
 refresh

آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
form عبدالمالت ریالی
در:
سلام علیک میشه از چند فونت در یک صفحه html استفاده کرد.؟
۱۳۹۹/۰۸/۰۱

form مبینا
در:
سلام من برنامه ای میخواستم که داخل ارایه 5 رنگ قرار گرفته باشه. و با استفاده از حلقه for این یک متنو به اون پنج...
۱۳۹۹/۰۸/۰۱

form mohadeseh
در:
ممنون از راهنماییتون مشکلم حل شد
۱۳۹۹/۰۷/۲۸

form محمد
در:
سلام. یک کد نوشته ام بدین صورت: وقتی صفحه باز شده یک پنجره پیام خالی با یک ok باز شده هر چه ok را...
۱۳۹۹/۰۷/۲۸

form فایز پور جهانبخشی
در:
سلام اگر بخواهیم برنامه ای که داخل متلب نوشتیم تا یک ثانیه اجرا شود و بعد از ثانیه اول در حالت خطا که...
۱۳۹۹/۰۷/۲۸

form mohadeseh
در:
الان کد من که توی تگ <head> گزاشتم میخواستم بدونم ایا امکانش هست که توی تگ link که ایکون رو باهاش اوردم بتونم...
۱۳۹۹/۰۷/۲۷

form mohadeseh
در:
سلام ببخشید لطفا راهنمایی کنید که چجوری title برای favicon در html بزارم؟ جوری که وقتی موس روی icon قرار بگیره متن...
۱۳۹۹/۰۷/۲۷

form ryomaechizen
در:
سلام. اگه حافظه وب پر بشه و مجبورا عکسا کپی باشن چطور باید مشکل بارگزاریشون حل بشه؟
۱۳۹۹/۰۷/۲۶

form رونا
در:
پرونده فرستاده شده نمی‌تواند به wp-content/uploads/2020/10 برود. سلام این ارور برای چی رخ می ده
۱۳۹۹/۰۷/۲۵

form reza
در:
سلام خوبید انشاالله؟ خواستم بدونم این نوار ابزار رو چطور باید اونایی رو دوست دارم بزارم سمت راست وبلاگم. هر چی کد و ......
۱۳۹۹/۰۷/۲۴

form سینا
در:
چگونه میتوانیم با استفاده از HTML فرمول شیمیایی مواد را بنویسیم؟ با عدد اتمی، جرمی و بار اتمی
۱۳۹۹/۰۷/۲۱

form فاطمه
در:
سلام ممنونم... خیلی ساده و روون توضیح دادین.. اونقدر که تشویق شدم محتوای یه فایل تکس رو با ایجکس درون یه div بیارم ولی...
۱۳۹۹/۰۷/۲۱

form امیرحسین
در:
خب متوجه شدم. که باید خط اول عدد فانکشن رو تغییر بدم. بسته به تعداد آرایه یا هر عدد دیگه تغییر بدم جوابمو...
۱۳۹۹/۰۷/۲۱

form امیرحسین
در:
عالی بود. خیلی ممنونم. ولی هر چند کلمه داخل آرایه داشته باشم به همون میزان خروجی گرفته میشه. من اگه 10 کلمه در آرایه داشته...
۱۳۹۹/۰۷/۲۱

form سعادتی
در:
سلام کاش روش برطرف کردن این بهم ریختگی رو هم توضیح میدادید. ممنون
۱۳۹۹/۰۷/۲۰
form امیرحسین
در:
موفق شدم اینو پیدا کنم. ولی میخوام کلمات تکراری داخلشون نباشه. مثال AAA فقط یک بار در اون خط وجود داشته باشه.
۱۳۹۹/۰۷/۲۰
form امیرحسین
در:
سلام. نه محدودیت زمانی وجود نداره.
۱۳۹۹/۰۷/۲۰
form امیرحسین
در:
سلام خسته نباشید. میخوام از این تابع برای بدست آوردن لیست های متفاوت استفاده کنم. مثلا یه آرایه داشته باشم. امیدوارم کمکم...
۱۳۹۹/۰۷/۲۰
form ابوالفضل
در:
سلام وقتتون بخیر من میخوام یه افزونه برای مرورگر کروم طراحی کنم و میخوام یه متنی رو هر سری از سایت دریافت کنه و...
۱۳۹۹/۰۷/۲۰
form mahdi
در:
سلام چطور می تونم از ip خارجی استفاده کنم؟ برای دریافت لانچر میخام. مرسی
۱۳۹۹/۰۷/۱۹
form احسان عباسی
در:
با سلام و تشکر از سایت خوبتون من یه کد تعریف کردم که در بورس ایران سهم مدنظرمو بیاره .. میخواستم ببینم امکانش هست دستوری...
۱۳۹۹/۰۷/۱۷
form شبنم
در:
سلام وقتتون بخیر، ببخشید از کلمه event یا e دقیقا چه زمانی توی فانکشن استفاده میکنیم؟
۱۳۹۹/۰۷/۱۷
form احمد
در:
با عرض سلام مجدد ساختار کلی دستورم به این صورت هست. بعد از حلقه وایل اون دیو کلاس 1 و 2 و 3 میخواهم...
۱۳۹۹/۰۷/۱۶
form احمد
در:
با عرض سلام ببخشید چطوری میتونم یه قسمت از تگ ها رو داخل حلقه وایل رد کنم دوباره تگ های بعدی داخل حلقه قرار بگیرن...
۱۳۹۹/۰۷/۱۶
form ابوالفضل
در:
سلام واقعا من خیلی گشتم تا بتونم این آموزش رو پیدا کنم چون واقعا نمی دونستم چی بنویسم تا یک رتبه بندی برای نتایج جستجو...
۱۳۹۹/۰۷/۱۵
form mahtab
در:
سلام وقتتون بخیر ببخشید میشه بفرمایید چجوری کلیپ رو بزاریم وبلاگ ؟؟ بی زحمت کامل بفرمایین ممنون و متشکر
۱۳۹۹/۰۷/۱۴
form Saeid Azari
در:
سلام ببخشید اگه امکانش هست سوال منو جواب بدید یکم گیج شدم...من یک کد html دارم که باید یک سایت درست کنم و ان را...
۱۳۹۹/۰۷/۱۳
form ابوالفضل
در:
سلام یک سوال دارم چجوری یک متنی که درون تگ td هست و بعد تگ br هست (تگ br درون تگ td است) رو...
۱۳۹۹/۰۷/۱۳
form parnian
در:
با سلام با توجه به این که این مطلب در سال 91 نوشته شده ایا تغیری هم کرده؟ مثلا استفاده و مهم بودن تگ های...
۱۳۹۹/۰۷/۱۳
form fahimeh
در:
سلام من دارم پروژه واسه دانشگاه مینویسم طراحی سایتو کردم برای کار با پایگاه داده دستور insert و delete کار میکنه ولی...
۱۳۹۹/۰۷/۱۲
form امین
در:
با عرض سلام ببخشید یه فرم دارم اخر فرمم یه دکمه دارم میخواستم بدونم چطوری باید بعد از کلیک کردن دکمه به صفحه دیگه انتقال...
۱۳۹۹/۰۷/۱۱
form محسن
در:
سلام من از فرم ساز گرویتی استفاده میکنم آیا امکان استفاده همچین چیزی رو میتونم داخلش داشته باشم آیا کدی داره که در قسمت...
۱۳۹۹/۰۷/۱۱
form مالکی
در:
چرا وبلاگم بالا نمی یاد
۱۳۹۹/۰۷/۰۹
form احمد
در:
با عرض سلام مجدد و خسته نباشید ببخشید نمونه کد رو اگر امکانش هست نگاه کنید که چطوری این متغییری رو که بدست اوردم در...
۱۳۹۹/۰۷/۰۹
form الناز
در:
سلام وقتتون بخیر. چطور میشه برنامه ای رو در php نوشت که کدملی رو تبدیل به شماره دانشجویی کنه اگه برام بنویسید ممنون میشم.
۱۳۹۹/۰۷/۰۹
form محمد
در:
سلام من میخواستم بدونم چه طوری میشه بدون اینکه از کاربر بپرسی که میخواهد از حساب خروج پیدا کند خود سایت بفهمد که کاربر از...
۱۳۹۹/۰۷/۰۹
form احمد
در:
با سلام ببخشید چطوری باید در جکوری از یک متغییر در صفحات دیگه استفاده کنم مثال دو عدد را باهم جمع کردم و ریختم داخل...
۱۳۹۹/۰۷/۰۹
form مهسا
در:
سلام و خسته نباشید مشکلی برای وبلاگ من پیش اومده موقع ورود بهم پیام میده وبلاگ داره بروز رسانی میشه و بعدا وارد وبلاگ شوید...
۱۳۹۹/۰۷/۰۸
form Moshtagh
در:
سلام و خسته نباشید بنده چند روزه که وقتی اطلاعات ورود به وبلاگم رو وارد تیترها و کلیک میکنم با چنین پاسخی مواجه میشم...
۱۳۹۹/۰۷/۰۸
form mahtab
در:
سلام خسته نباشین ببخشید چرا بلاگفا باز نمیکنه ؟؟؟ میرم مدیریت وبلاگ نه تو بروز شده ها وبی هستم نه هم که...
۱۳۹۹/۰۷/۰۷
form جواد
در:
سلام و عرض ادب. سایت من هک شده و یک کد ریدایرکت تو دیتابیس هاستم بارگزاری شده که آخر همه پست ها تو...
۱۳۹۹/۰۷/۰۷
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا 24 ساعت زمان ببرد.