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 ?