DCSIMG
Cancel post back from Radio button using javascript - שלמה גולדברג (הרב דוטנט)

שלמה גולדברג (הרב דוטנט)

מרצה בסלע ויועץ בעולם ה - net.

Cancel post back from Radio button using javascript

 

נניח שיש לכם את קוד ה - html הבא:

    <asp:RadioButton ID="RadioButton1"

                    runat="server"

                    AutoPostBack="true"

                    OnCheckedChanged="RadioButton1_CheckedChanged" />

 

    <asp:RadioButton ID="RadioButton2"

                    runat="server"

                    AutoPostBack="true"

                    OnCheckedChanged="RadioButton2_CheckedChanged" />

 
מה שזה אומר - שיש לנו שני radio button שכל שינוי יעשה post back ויפעיל את המתודה הרלוונטית בצד השרת.
 
מה קורה אם אנחנו רוצים לפעמים לבטל את הריצה לשרת.
 
בהתחלה חשבתי שאני צריך להוסיף את הקוד הבא:
    

    onclick = "return CheckFunc()" />

בתוך אותו CheckFunc אפשר לעשות בדיקות ולהחזיר true או false, (בדיוק כמו שאנחנו עושים עם buttons)
 
אבל מסתבר שאם נכתוב קוד כזה, הריצה לשרת לא תתבצע אף פעם, והסיבה היא, שכך נראה קוד ה - html שמתרנדר

    <input id="Radio1"

            type="radio"

            name="RadioButton1"

            value="RadioButton1"

            onclick="return CheckFunc();setTimeout('__doPostBack(\'RadioButton1\',\'\')', 0)" />

 
מה שאומר שלא משנה מה שהפונקציה שלנו תחזיר, ה - dopostback לא יתבצע מכיון שאנחנו יוצאים מ - onclick.
 
במידה ורק נקרא ל - CheckFunc מבלי לכתוב return, ה - postback יתבצע תמיד.
 
 
הפיתרון הבא הוא טיפה מכוער, אבל עובד.
 
מה שאני עושה זה לקרוא לפונקציה (ולכן הריצה לשרת תתבטל) ובמידת הצורך מתוך הפונקציה לרוץ לשרת.
 

    function CheckFunc() {

        var res = confirm('Message ?');

 

        if (res) {

            setTimeout('__doPostBack(\'<%= r1.UniqueID %>\',\'\')', 0)

        }

    }

 
 
דרך אגב, למה הקריאה ל - __doPostBack נמצאת בתוך setTimeout ?

תוכן התגובה

Avi Pinto כתב/ה:

האמת שזה פתרון ממש מכוער, וגם שביר (אם יש ולידטורים על הדף אז אאל"ט הקריאה שמתבצעת היא ל doPostbackWithParameters, ובמקרה זה אתה שובר את ההתנהגות)

פתרון מכוער קצת פחות - שימוש ב input-ים רגילים עם type=radio, וב onclick לקרוא ל click של כפתור חבוי במידה ואתה רוצה pstback

# June 16, 2009 10:33 PM

Shlomo כתב/ה:

צודק,

# June 17, 2009 10:24 AM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 5 and 4 and type the answer here:


Enter the numbers above: