focus על כפתור

ht2006

New member
focus על כפתור

הי, כדי לשים focus על כפתור רשמתי את הקוד הבא: בקובץ js חיצוני
function SetFocus() { if (document.getElementById("btnApprove")) document.getElementById("btnApprove").focus(); }​
וב-page_load של דף aspx רשמתי
btnApprove.Attributes.Add("onclick","SetFocus();");​
בהרצה כשלוחצים על הכפתור, נכנסים לפונקציה SetFocus, אין שום שגיאה, רק שבתכל'ס אין שום focus על הכפתור. למה אין focus? אם למישהו יש דרך לפתור את הבעיה, אשמח מאד!
 

blue25

New member
לא ברור

השאלה איזה סוג כפתור זה btnApprove, אם זה כפתור submit אז ברגע שמתרחש האירוע onclick הוא מבצע postback ולכן אתה לא תראה את ה focus, כי הוא מאבד אותו. חוץ מזה ברגע שמתבצע onclick על כל אובייקט (textbox, button) הוא מקבל focus אוטומטי... אם אתה רוצה לבצע onclick ושלא יבצע postback תרשום
btnApprove.Attributes.Add("onclick","SetFocus(); event.returnValue = false");​
 

ht2006

New member
הסוג לא sumbit.

<TD align="right" colSpan="4"><asp:button id="btnApprove" runat="server" CssClass="ApproveButton" Text="אישור" CausesValidation="False"></asp:button></TD>​
הפונקציה מתבצעת, שמתי breakpoint, אבל בתכל'ס אין שום שינוי. תודה
 

ht2006

New member
בעמם בהרצה זה כן

"<INPUT class=ApproveButton id=btnApprove onclick=SetFocus(); type=submit value=אישור name=btnApprove>"
אז אם למישהו יש תשובה, אשמח :)
 

24sharon

New member
אתה צריך להשתמש עם ה-

clentID של הכפתור. לכל כפתור צד שרת הID שלו בצד לקוח משתנה, בשביל להשיג את הID של הכפתור אתה צריך לכתוב כך:
if (document.getElementById('<%# btnApprove.ClientID %>')) //כנ"ל document.getElementById("btnApprove").focus();​
כתבתי את זה בחלון כאן אז ייתכן ויהיו בעיות של אותיות גדולות וקטנות. בהצלחה
 

blue25

New member
לא מדוייק ב 100%

בגדול את צודקת, ואני מאמין שזאת הבעייה שלו, אבל, לגבי המשפט "לכל כפתור צד שרת הID שלו בצד לקוח משתנה" -- לא תמיד נכון. ה clientID משתנה רק כאשר קיים סיכוי ש הID של האובייקט לא יהיה ייחודי, למשל, כאשר יש master page, ייתכן שבשני Content - ים שונים יהיו שני אובייקטים בעלי ID זהה. למשל, כאשר קיים DataGrid שמכיל Label, מופע של אותו Label יווצר עבור כל רשומה, לכן .NET ייתן ID ייחודי. בדף aspx רגיל שיש בו control שלא מוכל באוביקט כגון Repeate, Grid (ועוד כמה כאלה) אחר, ה ID ישאר אותו ID שנתת לו.
 

גנזר

New member
הרחבה:

לכל קונטרול בתוך UserControl יווצר ID ייחודי בשל העובדה ש"יתכן" והוא מופיע יותר מפעם אחת. - לכן כל מי שעובד עם UC צריך לקחת זאת בחשבון.
 

Justin Angel

New member
קה?

ה-ClientID ברמת הלקוח ואם כבר ה-UniqueID ברמת השרת (שההבדלים העקרוניים היחידיים שלהם הם האות של ה-Seperator) תמיד יהיו חח"ע ביחס ל-INamingContainer בתוכו יושבים פקדים. קרי, אם Button1 יושב בתוך Panel1 ה-ClinetID צד-לקוח שלו יהיה Pane1_Button1 (לא שם מדוייק, אבל בערך) גם אם כל מה שיש בדף זה הפנאל והכפתור. אפשר לראות את זה למשל בקוד מתוך Reflector על UniqueID שתמיד תתבצע רקורסיה על ה-INamingContainer של ההורה: (שבדוט נט 2.0 הוא תמיד כמעט ה-NamingContainer)
public virtual string UniqueID { get { if (this._cachedUniqueID == null) { Control control1 = this.NamingContainer; if (control1 == null) { return this._id; } if (this._id == null) { this.GenerateAutomaticID(); } if (this.Page == control1) { this._cachedUniqueID = this._id; } else { string text1 = control1.GetUniqueIDPrefix(); if (text1.Length == 0) { return this._id; } this._cachedUniqueID = text1 + this._id; } } return this._cachedUniqueID; } }​
(הסיבה שהדוגמה על UniqueID רלוונטית היא כי ClientID הוא בפועל UniqueID עם החלפה של ה-seperator chars ולא איזה ישות לוגית נפרדת).
 

EdotK

New member
חח"ע?! בנאדם.. איזה פלאשבק מאינפי

הפורום הזה אמור להיות מקום נחמד ומרגיע ולא מקום שנזכרים בו בזוועות כמו אינפי!
 

ht2006

New member
מה לכתוב ?

הי, מה זאת אומרת? לכתוב כמו שכתבת : btnApprove.ClientID או לכתוב איזה ערך מסוים שהוא ה-btnApprove.ClientID . ומה זה ה-% , #, וה-<> זה גם קשור? תודה לכולם
 

dino_din

New member
תכתוב בקוד

btnApprove.ClientID זה כבר אמור להחזיר לך את ה ID האמיתי של הפקד.
 
למעלה