يفقد AutoPostback مع TextBox التركيز
-
05-07-2019 - |
سؤال
أ TextBox
تم ضبطه على AutoPostback
حيث أن تغيير القيمة يجب أن يؤدي إلى إعادة حساب وعرض عدد من الحقول (للعرض فقط).
هذا يعمل بشكل جيد.
ومع ذلك، عندما يتم تبويب الحقل خارجًا، ينتقل التركيز لفترة وجيزة إلى الحقل التالي، ثم يختفي عند إعادة رسم الصفحة بحيث لا يكون هناك تركيز في أي مكان.
أريد أن يكون التركيز على الحقل الجديد، وليس على مربع النص الذي قمت بتغييره للتو.هل هناك طريقة لتحديد الحقل الذي تم التركيز عليه وإجباره على التركيز عليه مرة أخرى عند إعادة رسم الصفحة؟
المحلول
وهذا هو "حسب التصميم". إذا كنت تستخدم ASP.NET 2.0+ يمكنك محاولة استدعاء الأسلوب التركيز من مربع نص مرة واحدة يحدث إعادة النشر (يفضل أن يكون في الحدث TextChanged مربع نص).
ولست متأكدا إذا كان هناك أي طريقة مضمنة لتتبع التركيز ولكنني وجدت <لأ href = "http://www.codeproject.com/KB/aspnet/MainatinFocusASPNET.aspx" يختلط = "نوفولو noreferrer" > هذه المقالة في CodeProject التي ينبغي أن تفعل خدعة.
نصائح أخرى
هل يمكن أن تنظر أيضا في الحقول العرض الوحيد التحديث باستخدام AJAX <لأ href = "http://msdn.microsoft.com/en-us/library/system.web.ui.updatepanel.aspx" يختلط = "نوفولو noreferrer "> UpdatePanel . بهذه الطريقة لن تفقد التركيز من الحقل الجديد.
وأيضا لقد اقترحت النقي من جانب الخادم حل استنادا <م> WebControl.Controls .TabIndex م> التحليل، يمكنك استخدامها، إذا أردت.
هذا هو ما يحدث:
1) اضغط على TAB في الحقل - حدث العميل
2) التركيز على المجال التالي - حدث العميل
3) إعادة النشر - حدث الخادم
4) إعادة رسم الصفحة - الصفحة الجديدة لحدث العميل تتجاوز أحداث العميل السابقة
حل مشكلتك هو :
أ) الحصول على العنصر الذي اكتسب التركيز قبل إعادة النشر
<script>
var idSelected;
$("input").focusin(function () {
idSelected = this.id;
});
</script>
ب) تخزين معرف العميل (في الواقع var idSelected
) مكان ما (أي.مربع نص مخفي، مع ViewState = صحيح) قبل إعادة النشر
** ب) احصل على ClientID ** (استخرج من TextBox المخفي وضعه فيه var idSelected
) بعد إعادة النشر
د) احصل على العنصر باستخدام ClientID وقم بتعيين التركيز بعد إعادة النشر
<script>
$(document).ready(function () {
if (idSelected != null) {
$("#" + idSelected).focus();
idSelected = null;
});
});
</script>
ملحوظة:تستخدم هذه البرامج النصية عينة مسج.
تذكر أن تضع Jquery.js
في الحل الخاص بك ومرجع في صفحتك
<form id="form1" runat="server" enctype="multipart/form-data" method="post">
<asp:ScriptManager runat="server" >
<Scripts>
<asp:ScriptReference Path="~/Scripts/jquery.js" ScriptMode="Auto" />
....
ملاحظة 2:يعمل هذا الحل بدون أجاكس.
ينظر الى هذه الإجابة:لجعل Javascript يعمل على Ajax، يجب عليك استخدام كود مثل هذا:
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
function EndRequestHandler(sender, args)
{
MyScript();
}
</script>