سؤال

أ 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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top