הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   קבלת משתנה בJS מתוך פונקציה אחת, לאחרת? (https://hosts.co.il/forums/showthread.php?t=98860)

trupix 26-07-12 01:57

קבלת משתנה בJS מתוך פונקציה אחת, לאחרת?
 
הי,

בקוד שלי יש את הפונקציה הבאה:

PHP קוד:

function examlpe(current) {
current 10;


כאשר לוחצים על כפתור "Set Current", הוא קורא לפונקציה הנ"ל, משמע כאשר המשתמש ילחץ עליו יהיה משתנה גלובלי בשם current בעל הערך 10.

יש לי כפתור נוסף, כאשר המשתמש לוחץ עליו הוא קורא לפונקציה הבאה:

PHP קוד:

function readExample() {
alert(current);


אולם, כך מסתבר, זו לא הדרך.
המטרה שלי היא להעביר את המשתנה שמוגדר בתוך הפונקציה הראשונה, ושאהיה אוכל לגשת אליו.

אה וכן, אני שונא JS. (משמע אין כאן אפשרות להשתמש בJQ ...)

אשמח לעזרה!
thanks!

M.a.T.a.N 26-07-12 02:04

הקודים של הפונקציות בכלל לא נכונות...
למשל בפונקציה הראשונה, אתה כביכול מקבל ערך של CURRENT (בתוך הסוגריים של הפונ') אבל מיד אחרי זה מגדיר משתנה CURRENT ?
לעומת זאת בפונקציה השניה לא הגדרת משתנה + לא קיבלת אף משתנה בפונקציה (בסוגריים..) ואתה מנסה להציג פלט של המשתנה ?

תחביר ממש לא נכון.... אם כבר זה היה אמור להיות ככה הפונ' הראשונה:
PHP קוד:

function examlpe(current) {
alert(current);


וככה השניה:
PHP קוד:

function readExample() {
var 
current 10;


למרות שלפי מה שהבנתי אתה רוצה לקרוא מהפונקציה הראשונה לשנייה ואז זה כבר:
PHP קוד:

function examlpe() {
var 
current 10;
readExample(current);


function 
readExample(current) {
alert(current);



trupix 26-07-12 02:18

לצערי זה עדיין לא עובד..
אני מוכן להסביר שוב אם תרצה..

OmerC 26-07-12 03:02

למה לא להשתמש בפונקציה אחת כך :
PHP קוד:

function example(current) {
alert (current);


מקבלים ערך מהמשתמש ומציגים אותו.

Daniel 26-07-12 06:33

HTML קוד:

<script type="text/javascript">
current = 0;
function example(toCurrent) {
current = toCurrent;
}

function readExample() {
alert(current);



example(67);

readExample();
</script>

הטעות בקוד שלך היא שברגע שכתבת את current בתור פרמטר, אז הוא כבר לא גלובאלי כברירת מחדל.

אדיר 26-07-12 06:52

לפרטים נוספים חפש בגוגל Javascript variable scope

BuildDream 26-07-12 07:24

אם תגדיר את המשתנה מחוץ לפונקציה הוא יהיה גלובלי ותוכל לגשת אליו מ2 פונקציות שונות

trupix 26-07-12 15:01

ציטוט:

נכתב במקור על ידי Daniel (פרסם 852275)
הטעות בקוד שלך היא שברגע שכתבת את current בתור פרמטר, אז הוא כבר לא גלובאלי כברירת מחדל.


אוי אוי אוי ... צודק, טעות נוראה!
תודה! היה לוקח לי זמן לקלוט את זה ..

ממש ממש תודה לכל מי שלקח חלק! מעריך את זה |קורץ|

אני כותב כרגע קוד, אבל נתקעתי בשלב כלשהו וניסיתי לאתגר את עצמי בכך שכאן ביקשתי פיתרון למשהו שיעזור לי באופן עקיף לכתוב אותו..
נציג את זה בהמשך ..

trupix 26-07-12 17:39

שאלה כללית,

כשאני מצהיר -
num = 1,
ואני מנסה לחשב פעולות פשוטות כמו חיבור וחיסור, אני מקבל התייחסות שונה למשתנה.

לדוגמא (שימו לב לפלט של כל אחת מההודעות)

PHP קוד:


getNum 
1;

function 
myFunc(getNum) {
    
    
num getNum;
    
alert (num 1); // Output: 11
    
alert (num 1); // Output: 0




כאילו בפעולת החיבור ההתייחסות למשתנה היא כstring ולא integer..
גיגלתי קצת אודות, אולם לא מצאתי כל כך פיתרון ממשי...

עריכה
מסתבר שהפונקציה שראיתי היא כן הפיתרון:
PHP קוד:

num parseInt(getNum); 


Daniel 26-07-12 17:52

ציטוט:

נכתב במקור על ידי trupix (פרסם 852351)
שאלה כללית,

כשאני מצהיר -
num = 1,
ואני מנסה לחשב פעולות פשוטות כמו חיבור וחיסור, אני מקבל התייחסות שונה למשתנה.

לדוגמא (שימו לב לפלט של כל אחת מההודעות)

PHP קוד:


getNum 
1;

function 
myFunc(getNum) {
    
    
num getNum;
    
alert (num 1); // Output: 11
    
alert (num 1); // Output: 0




כאילו בפעולת החיבור ההתייחסות למשתנה היא כstring ולא integer..
גיגלתי קצת אודות, אולם לא מצאתי כל כך פיתרון ממשי...

עריכה
מסתבר שהפונקציה שראיתי היא כן הפיתרון:
PHP קוד:

num parseInt(getNum); 


שמח לעזור!

אתה צודק במה שאתה אומר שבפעולת חיבור, כאשר אחד הערכים הוא string - אז זה שרשור של הערכים:
PHP קוד:

"a" "1a" 

במקרה שאתה הצגת - דווקא זה בסדר. אם תריץ:
PHP קוד:

myFunc(1);

function 
myFunc(getNum) {
    
    
num getNum;
    
alert (num 1); // Output: 11
    
alert (num 1); // Output: 0




תקבל 2 ו-0.
אבל אם זה היה string - אז כמו שכתבת, צריך להשתמש ב-parseInt.


אגב, אם אתה רוצה כלי נוח כדי לבדוק, להריץ ולשתף קטעי קוד - http://jsfiddle.net/
יש לך שלושה ריבועים שבהם אתה יכול להכניס דברים - CSS, HTML, JavaScript - אתה יכול לטעון מראש מחלקות (mooTools, jQuery), ולשמור ולהריץ.

trupix 26-07-12 18:05

את מרבית הפונקציות שאני נותן, כשאני מבקש עזרה, אני מדמה כמעט אחד לאחד אך מחסיר קוד רב..
כשניסיתי להציג את הפלט זה הציג לי 11, סביר שמשהו מתוך הפונקציה גרם לכך..

על כל פנים, ואשמח לדעת אם אני טועה, אני מניח שיהיה נכון יותר להשתמש בparseInt שכן אני מתעסק במספרים ופעולות מתמטיות בלבד..

וכן, מכיר את jsfiddle והשתמשתי בו בעבר, אשתמש בו שוב למען נוחיותם של הרוב..
תודה דניאל:)

מצחיק שאני נתקע על קוד בJS, כשבחמש דקות אני כותב אותו בJQ .. :) :(

BuildDream 26-07-12 19:25

זה לא נכון להשתמש בjQuery כשזה לא נחוץ, אם אפשר לכתוב את זה בJavaScript פשוט זה עדיף.
וparseInt לא יעיל לפעולות מתמטיות - זה הופך את המשתנה לinteger - מספר שלם (ככה שאם תעשה פעולות מתמטיות עם שברים - זה יהרוס לך את החישובים).

PHP קוד:


getNum 
1

function 
myFunc(number) { 
     
    
alert (number 1); // Output: 2 
    
alert (number 1); // Output: 0 

}  

myFunc(getNum); 

זה יתן לך 2 ו-0 כמו שציפית. אם אתה מקבל קלט מהגולש בתור מחרוזת, אז זה כמו לקבוע getNum = "1"; ואז אם תוסיף 1 יצא 11 ואם תוריד 1 יצא 0.
ואז יש לך אפשרות להשתמש בפונקציה Number שמוציאה גם שברים ולא רק מספרים שלמים.


כל הזמנים הם GMT +2. הזמן כעת הוא 23:46.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ