PDA

View Full Version : تغییر Focus بدون Refresh



bardia goharbin
شنبه 28 بهمن 1385, 10:22 صبح
چگونه میتوان بدون اینکه صفحه Refresh شود، مثلا با کلیک بر روی یک لینک، فوکوس را به کنترل دیگری مثل یک TextBox داد

rtech
شنبه 28 بهمن 1385, 13:10 عصر
میتونی به هر کنترل یک tabindex بدی و بعد فوکوس بعدی رو با این روش مشخص کنی

فرض کنید 3 تا تکست باکس دارید و میخواهید وقتی کاربر اولی رو پر کرد و tab رو زد به جای اینکه به تکست باکس دومی بره تکست باکس سومی فعال بشه . برای این کار Tabindex این 3 تکست باکس را به ترتیب 1 و 3 و 2 بدهید . بدین ترتیب پس از پر کردن تکست باکس اول و با زدن دکمه تب فوکوس به کنترل سوم داده میشود نه دوم !

برای اینکه پس از کلیک شدن روی یک دکمه فوکوس به کنترل دیگری داده شود در رویداد کلیک این کد را بنویسید :

(Page.SetFocus(TextBox1

یاسر مددیان
شنبه 28 بهمن 1385, 18:01 عصر
با جاوااسکریپت باید این کار رو انجام بدی.

bardia goharbin
شنبه 28 بهمن 1385, 20:58 عصر
جناب Rtech متاسفانه روش شما جواب نداد. اگر با جاوااسکریپت باید انجام بشه ممنون میشم کد نمونه ای معرفی کنید

rtech
شنبه 28 بهمن 1385, 21:13 عصر
ابتدا یک نکته را متذکر میشوم که برای این کار نباید از کنترل ها asp.net استفاده کنید که تحت سرور هستند شما باید یک Input Button را در صفحه قرار دهید و Onclick آن را برابر setTextBoxFocus قرار دهید سپس اسکریپت مورد نظر را به صفحه خود اضافه کنید که کد کامل این برنامه را در ضمیمه این تاپیک میتونید دانلود کنید .

صابر
یک شنبه 29 بهمن 1385, 08:33 صبح
<asp:ImageButton ID="btnSave" runat="server" OnClientClick="javascript:document.getElementById('TextBox1').foc us();return false;" />

اگه MasterPage دارین و اسم Content Place Holder رو تغییر ندادیدن به جای TextBox1 این رو بذارین: ctl00_ContentPlaceHolder1_TextBox1

bardia goharbin
یک شنبه 29 بهمن 1385, 09:10 صبح
با تشکر از همه ، متاسفانه من باید از کنترل ASP استفاده کنم چون قبل از تغییر فوکوس کلی کار قراره انجام بده و بعدش فوکوس رو تغییر بده. تازه اینم بگم که اون کنترلی که قراره کار تغییر فوکوس رو انجام بده خودش توی یک DataList است. که از خاصیت CommandName و CommentArgument اون استفاده شده و نمیتوانم OnClientClick رو هم مورد استفاده قرار دهم حتی روال OnClick رو (عجب آشی)
خیلی ساده قضیه اینه :
من یک DataList دارم و در اون یک LinkButton و چند کنترل بایند شده دیگر.
بعد از DataList یک TextBox دارم.
قصدم این است که اگر کاربر بر روی هررکورد موجود در دیتالیست بر روی LinkButton ذکر شده کلیک کرد بعد از انجام دستوراتی فوکوس در اختیار TextBox که بعد از دیتالیست است قرار گیرد.
برای انجام کارهاى دلخواه از خاصیت CommandName و CommentArgument آن LinkButton استفاده کرده ام، حالا چگونه بعد از اجرا شدن دستوراتی که داده ام فوکوس را به تکست باکسی که در پایین DataList است انتقال دهم بدون Refresh صفحه.

صابر
یک شنبه 29 بهمن 1385, 10:17 صبح
قصدم این است که اگر کاربر بر روی هررکورد موجود در دیتالیست بر روی LinkButton ذکر شده کلیک کرد بعد از انجام دستوراتی فوکوس در اختیار TextBox که بعد از دیتالیست است قرار گیرد.

گفتید که "بعد از انجام دستوراتی "، خب اون دستورات Server Side هست دیگه؟
بعد از اون کارها، در آخرین خط دستوراتتون، از کدی که دوستمون گفت استفاده کنید: (Page.SetFocus(TextBox1

bardia goharbin
یک شنبه 29 بهمن 1385, 10:24 صبح
در حالت نرمال دستور شما درست است ولی اولا صفحه Refresh میشود و ثانیا در موردی که من قصد استفاده دارم کاربرد نداره.
چون Datalist من درون یک Ajax:UpdatePanel است و متاسفانه این دستور جواب نمیده. تست کردم. یک کمی پیچیده شده متاسفانه

صابر
یک شنبه 29 بهمن 1385, 11:22 صبح
هر دم از این باغ بری میرسد! پس updatepanel هم دارین!
میتونید یک وب سایت تستی که با access کار کنه بسازید و این فرم و توش راه بندازین و بفرستین؟

bardia goharbin
یک شنبه 29 بهمن 1385, 11:49 صبح
نمونه رو ارسال کردم تا شما و دوستان یه نگاهی بندازید بهش.

صابر
یک شنبه 29 بهمن 1385, 14:45 عصر
case "Reply":
{
System.Threading.Thread.Sleep(1000);
LblTxt.Text = "لطفا مطلب خود را وارد کنید";

string script = "alert(10);document.getElementById('" + TxtComment.ClientID + "').focus();"
+ " WebForm_AutoFocus('" + TxtComment.ClientID + "');";
ScriptManager.RegisterStartupScript(this,this.GetT ype(), "script1", script, true);
}
break;
جالبه که وقتی اون alert رو برمیدارم کار نمیکنه! فکر میکنم به این خاطره که یه وقفه به وجود میاره و احتمالاً اگه با دستور setTimeOut این وقفه رو ایجاد کنید. alert رو میتونید بردارید.

bardia goharbin
یک شنبه 29 بهمن 1385, 16:36 عصر
متاسفانه کدی که دادید کاری انجام نمیده !!!!!! به شما جواب داد با این کد؟

صابر
یک شنبه 29 بهمن 1385, 18:26 عصر
ببخشید یادم رفته بود بگم که توی رویداد Load مربوط به UpdatePanel کد Page.SetFocus(TxtComment) رو بنویسید.


protected void UpdateProgress1_Load(object sender, EventArgs e)
{
Page.SetFocus(TxtComment);
}

به هر حال پیوست هم کردم.