چگونه میتوان بدون اینکه صفحه Refresh شود، مثلا با کلیک بر روی یک لینک، فوکوس را به کنترل دیگری مثل یک TextBox داد
چگونه میتوان بدون اینکه صفحه Refresh شود، مثلا با کلیک بر روی یک لینک، فوکوس را به کنترل دیگری مثل یک TextBox داد
میتونی به هر کنترل یک tabindex بدی و بعد فوکوس بعدی رو با این روش مشخص کنی
فرض کنید 3 تا تکست باکس دارید و میخواهید وقتی کاربر اولی رو پر کرد و tab رو زد به جای اینکه به تکست باکس دومی بره تکست باکس سومی فعال بشه . برای این کار Tabindex این 3 تکست باکس را به ترتیب 1 و 3 و 2 بدهید . بدین ترتیب پس از پر کردن تکست باکس اول و با زدن دکمه تب فوکوس به کنترل سوم داده میشود نه دوم !
برای اینکه پس از کلیک شدن روی یک دکمه فوکوس به کنترل دیگری داده شود در رویداد کلیک این کد را بنویسید :
(Page.SetFocus(TextBox1
آخرین ویرایش به وسیله rtech : شنبه 28 بهمن 1385 در 13:22 عصر دلیل: اضافه کردن یک مثال
با جاوااسکریپت باید این کار رو انجام بدی.
جناب Rtech متاسفانه روش شما جواب نداد. اگر با جاوااسکریپت باید انجام بشه ممنون میشم کد نمونه ای معرفی کنید
ابتدا یک نکته را متذکر میشوم که برای این کار نباید از کنترل ها asp.net استفاده کنید که تحت سرور هستند شما باید یک Input Button را در صفحه قرار دهید و Onclick آن را برابر setTextBoxFocus قرار دهید سپس اسکریپت مورد نظر را به صفحه خود اضافه کنید که کد کامل این برنامه را در ضمیمه این تاپیک میتونید دانلود کنید .
<asp:ImageButton ID="btnSave" runat="server" OnClientClick="javascript:document.getElementById( 'TextBox1').focus();return false;" />
اگه MasterPage دارین و اسم Content Place Holder رو تغییر ندادیدن به جای TextBox1 این رو بذارین: ctl00_ContentPlaceHolder1_TextBox1
آخرین ویرایش به وسیله صابر : یک شنبه 29 بهمن 1385 در 08:34 صبح دلیل: حذف SkinID="SaveButton"
با تشکر از همه ، متاسفانه من باید از کنترل ASP استفاده کنم چون قبل از تغییر فوکوس کلی کار قراره انجام بده و بعدش فوکوس رو تغییر بده. تازه اینم بگم که اون کنترلی که قراره کار تغییر فوکوس رو انجام بده خودش توی یک DataList است. که از خاصیت CommandName و CommentArgument اون استفاده شده و نمیتوانم OnClientClick رو هم مورد استفاده قرار دهم حتی روال OnClick رو (عجب آشی)
خیلی ساده قضیه اینه :
من یک DataList دارم و در اون یک LinkButton و چند کنترل بایند شده دیگر.
بعد از DataList یک TextBox دارم.
قصدم این است که اگر کاربر بر روی هررکورد موجود در دیتالیست بر روی LinkButton ذکر شده کلیک کرد بعد از انجام دستوراتی فوکوس در اختیار TextBox که بعد از دیتالیست است قرار گیرد.
برای انجام کارهاى دلخواه از خاصیت CommandName و CommentArgument آن LinkButton استفاده کرده ام، حالا چگونه بعد از اجرا شدن دستوراتی که داده ام فوکوس را به تکست باکسی که در پایین DataList است انتقال دهم بدون Refresh صفحه.
در حالت نرمال دستور شما درست است ولی اولا صفحه Refresh میشود و ثانیا در موردی که من قصد استفاده دارم کاربرد نداره.
چون Datalist من درون یک Ajax:UpdatePanel است و متاسفانه این دستور جواب نمیده. تست کردم. یک کمی پیچیده شده متاسفانه
هر دم از این باغ بری میرسد! پس updatepanel هم دارین!
میتونید یک وب سایت تستی که با access کار کنه بسازید و این فرم و توش راه بندازین و بفرستین؟
نمونه رو ارسال کردم تا شما و دوستان یه نگاهی بندازید بهش.
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 رو میتونید بردارید.
متاسفانه کدی که دادید کاری انجام نمیده !!!!!! به شما جواب داد با این کد؟
ببخشید یادم رفته بود بگم که توی رویداد Load مربوط به UpdatePanel کد Page.SetFocus(TxtComment) رو بنویسید.
protected void UpdateProgress1_Load(object sender, EventArgs e)
{
Page.SetFocus(TxtComment);
}
به هر حال پیوست هم کردم.