برگزیده های پرشین تولز

کمک برای بکار گيری متغيری بيرون از يک تابع

iranmehr

کاربر تازه وارد
تاریخ عضویت
16 آگوست 2003
نوشته‌ها
97
لایک‌ها
8
با درود فراوان، :)

من هيچ از javascript سر در نمی‌آورم و هرکار کردم نتوانستم، آن‌چرا که می‌خواهم، انجام بدهم. برای همين نياز به راهنمايی دارم.


می‌خواهم در رويدادی (onClick) زمانی که بازديد کننده کليک می‌کند، مقداری را هم به يک متغير بدهم. سپس اين متغير را در جای ديگری بکار ببرم. (onClick="do something;x=value")
(من می‌خواهم هنگام کليک کردن ويژگی تگی را در درون صفحه عوض کنم. چناچنه شما راه بهتری می‌دانيد، سپاسگزار می‌شوم من را راهنمايی کنيد.)

می‌خواستم بدانم راهی هست تا مقدار اين متغير را بيرون از تابعی که در onClick مقداردهی کرده‌ام، بکار ببرم؟ مانند C. اگر هست چگونه؟

در زير الگوی آنچه را که می‌خواهم، آورده‌ام:


کد:
<script language="javascript" type="text/javascript">

function functionName(functionID)

{
if (…) {

do job 1
}  else {
do job 2
}
}
 </script>

<body>

<img … onClick="functionName(functionID1);x='y'">


<script type="text/javascript" language="javascript">

use x

do something with x

 </script>

<img … onClick="functionName(functionID1);x='z'">

</body>

يا

کد:
<script language="javascript" type="text/javascript">

function functionName(functionID)

{
if (…) {

do job 1;x='y'
}  else {
do job 2;x='z'
}
}

<body>

<img … onClick="functionName(functionID1">


<script type="text/javascript" language="javascript">

use x

do something with x

 </script>

<img … onClick="functionName(functionID1">

</body>

پيشاپيش از کمک و راهنمايی شما سپاسگزاری می‌کنم.
 

iranmehr

کاربر تازه وارد
تاریخ عضویت
16 آگوست 2003
نوشته‌ها
97
لایک‌ها
8
کسی نبود اين پرسش من را پاسخ بگويد؟

هر گونه ايده و راهنمايی، سودمند خواهد بود.

با سپاس
 

alpha

کاربر تازه وارد
تاریخ عضویت
20 دسامبر 2002
نوشته‌ها
334
لایک‌ها
1
من دقيقا نفهميدم چه مكشلي وجود داره . اگر مي خواي كدي كه نوشتي رو دقيقا بذار تا ببينم . اما در حالت كلي و عادي متغيرهايي كه در جاوا اسكريپت وجود داره پابليك هستند و در كل صفحه قابل دستيابي هستند . شما يك متغيري رو اول صفحه تعريف كن . خارج از تابع و به صورت عمومي . بعد تا آخر صفحه هر كاري مي توني روي اون انجام بدي . نبايد مشكلي باشه .
 

iranmehr

کاربر تازه وارد
تاریخ عضویت
16 آگوست 2003
نوشته‌ها
97
لایک‌ها
8
دست شما درد نکند.

من کدی ننوشتم. از اينور آنور برداشته‌ام. :blush: چيزی که هست همان است که در بالا گذاشتم. تنها تابع‌ها (تابعی برای نشان دادن و پنهان کردن عکس و نوشته - از همين جا برداشتم) را نگذاشتم.

يک عکس هست که زمانی که رويش کليک می‌کنی عکس عوض می‌شود و عکس دوم در کنار پنهان يا نشان دادن نوشته‌ای، نشان داده می‌شود.

اکنون من می‌خواهم استايل (style) تگی را که در کد صفحه ميان دو عکس جا دارد را نيز همزمان با کليک کردن روی عکس‌ها عوض کنم. هيچ راهی بلد نبودم، برای همين در درون رويداد onClick برای هر عکس يک متغير نوشتم و در هر کدام مقداری متفاوت به آن دادم. سپس در آن تگ ميانی درون تگ جاوا اسکريپت گفتم اگر آن متغير با فلان مقدار برابر است، استايل 1 را و اگر برابر نبود استايل 2 را نشان بدهد. که کار نمی‌کند. شايد متغير را درست مقدار دهی نمی‌کنم و يا نمی‌دانم چگونه آن را در جای ديگر بکار ببرم و در کل اين گونه کد در جاوا نادرست است.

يک همچين چيزی:
کد:
<img … onClick=" displayit(menu1);x=0">


<script type="text/javascript" language="javascript">

if (x == 0) {

document.write("<tag style=\"xxx\">")

} else { 
document.write("<tag style=\"yyy\">")

}

 </script>

<img … onClick="displayit(menu1);x=1">

تازه شايد بشود از آن مقداری که در تابع به menu نسبت داده می‌شود نيز استفاده کرد که من نمی‌دانم چگونه؟
(menu.display = “none” و menu.display = “block”)
 

alpha

کاربر تازه وارد
تاریخ عضویت
20 دسامبر 2002
نوشته‌ها
334
لایک‌ها
1
ببين مشكل اينه كه كد ها رو از جاهاي مختلف جمع كردي و خودت هم زياد آشنا نيستي . براي همين من هم كه يم بينم سر در نمي آرم .
ولي اينطوري عمل كن . اون بالاي صفحه تو هدر متغير ها رو تعريف كن و مقدار اوليه بده . بعد هر جا كه خواستي مقدار رو عوض كن . اينها از بالا به پايين اجرا مي شوند . مي توني براي كارهاي ديگه تابع بنويسي و داخل اون تابع متغيرها رو ست كني . نه داخل onclick ( البته فكر نكنم مشكلي داشته باشه )
صبر كن ببينم مي تونم يك كد برات بنويسم به عنوان مثال .
 

iranmehr

کاربر تازه وارد
تاریخ عضویت
16 آگوست 2003
نوشته‌ها
97
لایک‌ها
8
بسيار سپاسگزارم.

من روش‌های گوناگونی که به فکرم می‌رسيد را آزمايش کردم. توی خود همان تابع اصلی هم متغيرها را مقداردهی کردم. همچنين در همان جا برای شرط نخست يک استايل و برای شرط دوم استايل ديگر تعريف کردم تا ديگر نيازی نباشد آن تگ و استايل آن را يک بار ديگر درون تگ جاوا بنويسم. ديگر از متغير خود تابع برای اينکار استفاده کردم. کلی هم تقلب کردم. نشد که نشد. :)

اينی که شما می‌فرماييد مقدار متغيرها از بالا به پايين است، درست. بگمانم يک مشکل من هم همين است که می‌خواهم از رويدادی (onEvent) در عکس پايين، مقداری را برای متغير بالايی تعريف کنم.

* خواهش می‌کنم خود را زياد به دردسر نياندازيد.
 

alpha

کاربر تازه وارد
تاریخ عضویت
20 دسامبر 2002
نوشته‌ها
334
لایک‌ها
1
به نقل از iranmehr :
بسيار سپاسگزارم.

من روش‌های گوناگونی که به فکرم می‌رسيد را آزمايش کردم. توی خود همان تابع اصلی هم متغيرها را مقداردهی کردم. همچنين در همان جا برای شرط نخست يک استايل و برای شرط دوم استايل ديگر تعريف کردم تا ديگر نيازی نباشد آن تگ و استايل آن را يک بار ديگر درون تگ جاوا بنويسم. ديگر از متغير خود تابع برای اينکار استفاده کردم. کلی هم تقلب کردم. نشد که نشد. :)

اينی که شما می‌فرماييد مقدار متغيرها از بالا به پايين است، درست. بگمانم يک مشکل من هم همين است که می‌خواهم از رويدادی (onEvent) در عکس پايين، مقداری را برای متغير بالايی تعريف کنم.

* خواهش می‌کنم خود را زياد به دردسر نياندازيد.


اين مثال رو ببين براي عوض كردن عكسها در هر چند ثانيه :
http://javascript.internet.com/miscellaneous/javascript-image-slider.html

داخل اسكريپتها متغيرهاي زيادي به كار رفته كه در تابعهاي مختلف مقداردهي شدند . مثلا متغير كانتر ( شمارنده ) كه اول تعريف شده . بعد در يك تابع اضافه مي شه و در يك تابع هم صفر مي شه . ببين مي توني ازش به عنوان راهنما استفاده كني ؟
 

alpha

کاربر تازه وارد
تاریخ عضویت
20 دسامبر 2002
نوشته‌ها
334
لایک‌ها
1
اين هم بسيار ساده است و خودم نوشتم . يك تكست باكس و سه تا لينك كه با كليك رويس يكي از اونها متغير يكي اضافه مي شه . با كليك روي دومي يكي كم و با كليك روي سومي دو تا اضافه . در ضمن متغير رو بالا تعريف كردم . دو تاي اول تو تابع انجام مي شه . آخري مثل اوني كه تو نشوته بودي بيرون از تابع . خودش هم ژشت سر هم اجرا نيم شن و هر كدوم وظيفه خودشون رو هر جاي صفحه كه باشند انجام مي دند . شايد بتونه ديد بهت بده :

کد:
<html>
<head>

<script language=javascript>

var alpha=0;

function inc()
{
	alpha++;
	document.frm.inp1.value = alpha;
	
}
function dec()
{
	alpha--;
	document.frm.inp1.value = alpha;
}
</script>
</head>
<body>
<form name=frm>
<input type=text id=inp1 size=5>
<a id=inp1 href="#" onclick='inc();'> + 1 </a>
&nbsp;&nbsp;
&nbsp;&nbsp;
<a id=inp1 href="#" onclick='dec();'> - 1</a>
&nbsp;&nbsp;
&nbsp;&nbsp;
<a id=inp1 href="#" onclick='alpha++;alpha++;document.frm.inp1.value = alpha;'> + 2</a>
</form>
</body>
</html>
 

iranmehr

کاربر تازه وارد
تاریخ عضویت
16 آگوست 2003
نوشته‌ها
97
لایک‌ها
8
زحمت کشيديد.

با اين همه من هرکار می‌کنم نمی‌شود! که بگمانم يک جايی را نادرست انجام می‌دهم.

من متغير را در دو بخش if و else تابع خودم مقدار دهی کردم. سپس آن را برای مقايسه در شرط ميان برنامه گذاشتم. در هر دو صورت درست و يا نادرست بودن شرط تنها يک حالت را بر می‌گرداند.

تابع:
کد:
function displayit(menu) {
if (…) {
document.do.job1;
alpha = 1;
}  else {
document.do.job2;
alpha = 2;
}
}

شرط درون صفحه:
کد:
<script type="text/javascript" language="javascript">
if (alpha == 1) {
document.write("style1")
} else {
document.write("style2")
}
</script>

اين را هم آزمايش کردم:


کد:
<script type="text/javascript" language="javascript">
if (alpha == 1) {
document.write("style1")
} else if (alpha == 2) {
document.write("style2")
}
</script>




سپس همانند شما در ادامه‌ی متغير در هر دو بخش شرط تابع اين کد را نوشتم:

کد:
function displayit(menu) {
if (…) {
document.do.job1;
alpha = 1;
document.frm.inp1.value = alpha;
}  else {
document.do.job2;
alpha = 2;
document.frm.inp1.value = alpha;
}
}




و اين کد شما را جای آن شرط خودم ميان عکس‌ها گذاشتم:

کد:
<form name=frm>
<input type=text id=inp1 size=5>
</form>
مقدار متغير را در هربار کليک کردن عوض می‌کرد و درست نشان می‌داد.

چرا همچين رفتاری می‌کند؟!
 

alpha

کاربر تازه وارد
تاریخ عضویت
20 دسامبر 2002
نوشته‌ها
334
لایک‌ها
1
اينجوري هيچ مشكلي حل نميشه چون من هيچ مشكلي در كدهاي شما نمي بينم . شما يا دقيقا بگيد كه چيكار مي خواهيد بكنيد يا اينكه اون صفحه اي رو كه نوشتيد كامل بگذاريد اينجا .
 

iranmehr

کاربر تازه وارد
تاریخ عضویت
16 آگوست 2003
نوشته‌ها
97
لایک‌ها
8
من يک آزمايش ديگر هم انجام دادم و به اين نتيجه رسيدم که کد من نادرست است.

بگمانم نادرستی را هم پيدا کرده‌ام، گرچه هنوز نتوانسه‌ام راهی را که يافته‌ام در تابع خود بکار ببرم. باز هم کوشش می‌کنم، اگر نتوانستم آن را به انجام برسانم از شما کمک می‌گيرم.
* درست شد اينجا می‌نويسم.

از زحمت و توجه شما بسيار سپاسگزارم.
هميشه سربلند و پيروز باشيد.
 

iranmehr

کاربر تازه وارد
تاریخ عضویت
16 آگوست 2003
نوشته‌ها
97
لایک‌ها
8
با درود فراوان، :)

من داشتم يک کد ديگر را بکار می‌بردم که دريافتم آن در ie کار می‌کند و در mozila اينچنين نيست. پس از کمی دستکاری در mozila هم کار کرد. سپس با خود گفتم شايد آن مشکل من که برای شما نوشتم به همين سبب کار نمی‌کند. چون از آغاز آن را در يکی از مرورگرهای mozila آزمايش می‌کردم. نخستين کدی را که برای کارم بکار برده بودم در ie نيز آزمايش کردم، براحتی پاسخ داد. يک خط که نيازی به اين همه دنگ و فنگ نداشت. با اين همه هرکار کردم نتوانستم کاری بکنم که در mozila نيز کار بکند.

آن يک خط اين است:
کد:
id_name.style.width = x

که id_name و يا هر نام ديگری را برای id تگ دلخواهم بکار می‌برم.
کد:
function displayit(menu) {
if (…) {
document.do.job1;
id_name.style.width = 50
}  else {
document.do.job2;
id_name.style.width = 100
}
}

اکنون می‌خواستم بدانم شما می‌دانيد چگونه می‌شود اين کد را به گونه‌ای نوشت که در mozila هم کار بکند؟
 

alpha

کاربر تازه وارد
تاریخ عضویت
20 دسامبر 2002
نوشته‌ها
334
لایک‌ها
1
من فكر نمي كنم اينطوري باشه . مثلا اون كدي كه من نوشتم تو تمام مرورگر ها به خوبي كار مي كنه . در واقع جاوا اسكريپت يك زبانه و دستورات واحدي داره .
تنها چيزي كه مي تونه مشكل تو رو حل كنه كه كد كامل رو بذاري اينجا
 
بالا