كيف يمكنك ضبط التركيز على عنصر إدخال HTML دون الحاجة إلى وجود كل HTML؟

StackOverflow https://stackoverflow.com/questions/808908

  •  03-07-2019
  •  | 
  •  

سؤال

أولاً: الخلفية:أنا أعمل في Tapestry 4، لذلك يتم تجميع HTML لأي صفحة معينة معًا من أجزاء وأجزاء مختلفة من HTML المنتشرة في جميع أنحاء التطبيق.بالنسبة للمكون الذي أعمل عليه ليس لدي <body> علامة لذلك لا أستطيع أن أعطيها onload يصف.

يحتوي المكون على عنصر إدخال يحتاج إلى التركيز عند تحميل الصفحة.هل يعرف أحد طريقة لتعيين التركيز على إدخال ملف (أو أي إدخال آخر من نوع النص) عند تحميل الصفحة دون الوصول إلى علامة الجسم؟

لقد حاولت إدخال البرنامج النصي في الجسم مثل
document.body.setAttribute('onload', 'setFocus()')
(حيث setFocus هي وظيفة تحدد التركيز على عنصر إدخال الملف)، لكن ذلك لم ينجح.لا أستطيع أن أقول أنني فوجئت بذلك بالرغم من ذلك.

يحرر:
كما ذكرنا سابقًا، أحتاج بالفعل إلى القيام بذلك باستخدام مكون الصفحة.انتهى بي الأمر بإضافة مدخلات من نوع الملف إلى البرنامج النصي الذي نستخدمه للتركيز على أول إدخال مرئي وقابل للتحرير على الصفحة.أثناء البحث في هذه المشكلة، لم أجد أي مشكلات أمنية عند القيام بذلك.

هل كانت مفيدة؟

المحلول

لقد عملت هذا جيد بالنسبة لي:

<script>
  function getLastFormElem(){
    var fID = document.forms.length -1;
    var f = document.forms[fID];
    var eID = f.elements.length -1;
    return f.elements[eID];
  }
</script>


<input name="whatever" id="maybesetmaybenot" type="text"/>
<!-- any other code except more form tags -->

<script>getLastFormElem().focus();</script>

نصائح أخرى

<script>
window.onload = function()  {
     document.getElementById('search_query').select();
    //document.getElementById('search_query').value = ''; 
    // where 'search_query' will be the id of the input element
};
</script>

ويجب أن تكون مفيدة وأعتقد !!!

والتي يمكن أن تعطي نافذة معالج ONLOAD

window.onload = setFocus;

واعتقد ان لديك مشكلة أساسية مع التغليف الخاصة بك. وإن كان في معظم الحالات، يمكن أن نعلق معالج أحداث إلى الحدث onload - راجع HTTP: // ejohn كافيه / المشروعات / مرنة، جافا سكريبت، أحداث / التي كتبها جون ريسيغ عن كيفية القيام بذلك، تحتاج setFocus لأن تدار من قبل عنصر الصفحة لأنك لا يمكن أن يكون عنصرين على الصفحة الخاصة بك تتطلب أن تحصل على التركيز عند تحميل الصفحة.

وحاول اللعب مع tabstop السمة

وأولا وقبل كل شيء، وملف الإدخال ليس نفس المدخلات الأخرى، تحتاج أن تضع ذلك في الاعتبار .... أن يكون لأسباب أمنية. عندما ملف الإدخال الحصول على التركيز ينبغي أن يكون للقراءة فقط أو المتصفح يجب المنبثقة عن الحوار لاختيار بعض الملفات.

والآن، لالمدخلات الأخرى التي يمكن أن تحاول بعض الأحداث ONLOAD على بعض العناصر الخاصة بك ... (وليس فقط الجسم يكون الحدث onload) أو هل يمكن استخدام جافا سكريبت مضمنة في منتصف أتش تي أم أل. إذا وضعت شفرة جافا سكريبت دون أن تقول هي وظيفة يحصل ينفذ في حين أن المتصفح يقرأ عليه. شيء من هذا القبيل:

<script type="text/javascript">

function yourFunction()
{
   ...;
};

alert('hello world!");

yourFunction();

</script>

وسوف يتم تنفيذ وظيفة بعد التنبيه فقط عند المستعرض يقرأ عليه.

إذا كنت تستطيع، يجب عليك استخدام مسج للقيام جافا سكريبت الخاصة. وسوف يصبح لديك يعيش سووو السهل من ذلك بكثير ....:)

مع مسج يمكن القيام به مثل هذا:

$(function() {
    $("input:file").eq(0).focus()
})

مع جافا سكريبت عادي يمكن القيام به مثل هذا:

var oldWindowOnload = window.onload; // be nice with other uses of onload 
window.onload = function() {
    var form = document.forms[0];
    for(i=0; i < form.length; i++) {
        if (form[i].type == "file") {
            form[i].focus();
        }
    }
    oldWindowOnload();
}

للحصول على حل أكثر تفصيلاً باستخدام جافا سكريبت العادي، راجع اضبط التركيز على الإدخال الأول في صفحة الويب على مشروع الكود.

وحل Scunliffe لديها ميزة سهولة الاستخدام.

وعندما يتم تحميل البرامج النصية الصفحة ببطء، داعيا التركيز () من "ONLOAD" الحدث يجعل سيئة جدا صفحة "قفزة" في حال تمرير المستخدم بعيدا الصفحة. لذلك هذا هو نهج سهلة الاستعمال أكثر من ذلك:

<input id="..."></input>
... really small piece of HTML ...
<script>getTheDesiredInput().focus();</script>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top