הרשם שאלות ותשובות רשימת חברים לוח שנה הודעות מהיום

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

   
|!|

השב
 
כלים לאשכול תצורת הצגה
ישן 06-08-11, 12:55   # 1
Itay
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
גיל: 34
הודעות: 564

Itay לא מחובר  

קריאה לפונקציה שנמצאת בתוך $(document).ready() מבחוץ

מישהו יודע איך אפשר לקרוא לפונקצייה שמוגדרת בתוך $(document).ready() מפונקציה שנמצא מבחוץ?
כלומר משהו כזה:
קוד:
function CallMe()
{
    someFunc();
}

$(document).ready(function()
{
    function someFunc()
    {
        alert('something');
    }
});
באופן כללי - יש לי timeout שמוגדר בתוך פונקציה שמוגדרת בתוך ready() - אני צריך דרך פונקציה שמופעלת מבחוץ לנקות את הטיים-אווט הזה.
  Reply With Quote
ישן 06-08-11, 14:22   # 2
BlueNosE
אין כמו ב127.0.0.1
 
BlueNosE's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: כפ"ס
גיל: 31
הודעות: 4,086

BlueNosE לא מחובר  

קוד:
$(document).ready(function()
{
    var someFunc = function()
    {
        alert('something');
    };
});


function CallMe()
{
    $(function() {
      someFunc();
    });
}
__________________
עומר,
admin [@] rely.co.il

בניית אתרים Rely

סלנג מילון סלנג utter
  Reply With Quote
ישן 06-08-11, 14:35   # 3
Itay
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
גיל: 34
הודעות: 564

Itay לא מחובר  

לא עובד.. והקטע שזה נתקע באיזו שגיאה כנראה שלא מוצגת לי ב-console
אם אני שם אלרט לפני הקריאה לפונקציה (ניסיתי גם לקרוא לזה סתם כמשתנה) זה עובד, אם אני שם את האלרט אחרי זה כבר לא עובד
  Reply With Quote
ישן 06-08-11, 14:58   # 4
BlueNosE
אין כמו ב127.0.0.1
 
BlueNosE's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: כפ"ס
גיל: 31
הודעות: 4,086

BlueNosE לא מחובר  

תוכל להביא פה את הקוד תכלס? אולי הבעיה בTIMEOUT
__________________
עומר,
admin [@] rely.co.il

בניית אתרים Rely

סלנג מילון סלנג utter
  Reply With Quote
ישן 06-08-11, 15:09   # 5
Itay
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
גיל: 34
הודעות: 564

Itay לא מחובר  

יש לי -Timeout שמוגדר ככה (בתוך ה-ready):
קוד:
nextTO = setTimeout( function() { next(); } , 15000);
הגדרתי בתוך ה-ready() כמו שאמרת בצורה הזאת:
קוד:
var stopTO = function() { clearTimeout(nextTO); alert('test'); }
ויש לי פונקציה מבחוץ שמוגדרת ככה:
קוד:
function onStateChange(newState)
{
    if(newState > 0)
    {
        $(function()
        {
            alert(newState); // עובד
            stopTO();
            alert('test 11'); // לא עובד
        });
        document.getElementById("blala").innerHTML = "stopped"; // לא עובד
    }
}
אני לא מביא את כל הקוד כי הוא סתם ארוך ולא קשור לעניין הזה
  Reply With Quote
ישן 06-08-11, 15:31   # 6
BlueNosE
אין כמו ב127.0.0.1
 
BlueNosE's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: כפ"ס
גיל: 31
הודעות: 4,086

BlueNosE לא מחובר  

קודם כל תוסיף var לפני הnextTO.
דבר שני אם אתה מגדיר את הפונקציה רק לאחר הטעינה אפשר לקצר תהליכים:
קוד:
$(function() { // כמו document.ready
var nextTO = setTimeout( function() { next(); } , 15000);
});
function onStateChange(newState)
{
    if(newState > 0)
    {
        $(function()
        {
            alert(newState); // עובד
            clearTimeout(nextTO); alert('test');
            alert('test 11'); // לא עובד
        });
        document.getElementById("blala").innerHTML = "stopped"; // לא עובד
    }
}
מה שאנחנו עושים פה, זה מוסיפים לתור את הclearTimeout, ובגלל שהוא נוסף לתור אחרי שnextTO מאותחל, אין שום בעיה לקרוא לו בצורה הזאת בלי לחשוש משגיאה.
__________________
עומר,
admin [@] rely.co.il

בניית אתרים Rely

סלנג מילון סלנג utter
  Reply With Quote
ישן 06-08-11, 15:44   # 7
Shay Ben Moshe
משתמש - היכל התהילה
 
מיני פרופיל
תאריך הצטרפות: Oct 2007
הודעות: 1,397

Shay Ben Moshe לא מחובר  

אתה לא יכול, או לפחות לא אמור להיות מסוגל.
זה לא באותו scope, זה לא אמור לפעול.

אתה יכול להצהיר על משתנה בחוץ, ולתת לו ערך בפנים, אבל בגדול global variables זה bad practice.
__________________
שי בן משה - בונה אתרים
חותך אתרים, ומתכנת צד לקוח וצד שרת.
  Reply With Quote
ישן 06-08-11, 16:47   # 8
BlueNosE
אין כמו ב127.0.0.1
 
BlueNosE's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: כפ"ס
גיל: 31
הודעות: 4,086

BlueNosE לא מחובר  

ציטוט:
נכתב במקור על ידי Shay Falador צפה בהודעה
אתה לא יכול, או לפחות לא אמור להיות מסוגל.
זה לא באותו scope, זה לא אמור לפעול.

אתה יכול להצהיר על משתנה בחוץ, ולתת לו ערך בפנים, אבל בגדול global variables זה bad practice.
זה JS, אין באמת Scope. אולי בתפיסה הקלאסית זה לא נכון, אבל JS רחוק שנות אור מתכנות קלאסי.

אגב, אם כבר נכנסים לעניין של bad practice, באופן אישי באמת הייתי מעדיף לרשום:
קוד:
$(function() {
TO.set(15000);
});

var TO = {
   obj : null,
   set : function(time) {
     this.obj = setTimeout( function() { next(); } , time);
   },
   nullify : function() {
     clearTimeout(this.obj);
   }
};

function onStateChange(newState)
{
    if(newState > 0)
    {
        $(TO.nullify);
        document.getElementById("blala").innerHTML = "stopped"; // לא עובד
    }
}
__________________
עומר,
admin [@] rely.co.il

בניית אתרים Rely

סלנג מילון סלנג utter
  Reply With Quote
ישן 06-08-11, 17:16   # 9
Itay
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
גיל: 34
הודעות: 564

Itay לא מחובר  

אין לי כ"כ חשק להתחיל לשנות את כל המבנה עכשיו (אם זאת תהיה הברירה היחידה אני אעשה את זה), אבל הדבר הראשון שכתבת גם לא עבד.
הגדרתי את nextTO בתור var וזה לא עוזר. עשיתי אלרט של טייפ-אוף ובפונקציה onStateChange (זאת שבחוץ) זה מחזיר לי undefined ואם אני עושה באותה פונקציה שמגדירה את זה זה רושם לי number
  Reply With Quote
ישן 06-08-11, 18:59   # 10
BlueNosE
אין כמו ב127.0.0.1
 
BlueNosE's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: כפ"ס
גיל: 31
הודעות: 4,086

BlueNosE לא מחובר  

אוקיי, הרצתי את הקוד, הבעיה מעצבנת וקשורה בסמנטיקה של Javascript.
לא עובד:
קוד:
$(function() {
var nextTO = setTimeout( function() { next(); } , 15000);
});
עובד:
קוד:
var nextTo;
$(function() {
nextTO = setTimeout( function() { next(); } , 15000);
});
מעצבן, אבל עובד
__________________
עומר,
admin [@] rely.co.il

בניית אתרים Rely

סלנג מילון סלנג utter
  Reply With Quote
השב

חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים)
 


חוקי פירסום
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is מופעל
סמיילים הם מופעל
[IMG] קוד מופעל
קוד HTML מכובה

קפיצה לפורום


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

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