كشف جافا سكريبت السياق بضغطة (شكل اختيار التاريخ مقابل شكل تقديم)

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

سؤال

وأنا أكتب شكل المساعد شبه عام باستخدام مسج من أجل الإسراع في تطوير مشروع أعمل على.

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

وكل شيء يعمل بشكل جيد، باستثناء معيار "عندما يدخل الضغط، يقدم على شكل" التعليمات البرمجية التي عليك القيام به عندما كنت تزوير شكل:

opts.coreElement.find('input[type=text]').keypress(function(evt) {
    if ((evt.keyCode || evt.which) == 13) {
        opts.coreElement.find('.saveButton').click();
    }
});

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

والحل واضح ويبدو أن لادخال عنصر نموذج حول الحقول ووقف أي إمكان تقديم هذا النموذج وهمية عبر مسج. لحسن الحظ لدي متسع من القيام بذلك وأنا في ASP.NET MVC، ولكن ماذا لو لم أكن؟ ماذا لو لم بلدي المساعد لا يعرفون ما إذا كان بالفعل داخل نموذج ولذلك كان للحفاظ على نفسها لنفسها؟ ماذا لو كنت في معيار ASP.NET لدت WebForms وأنا <م> قد يدويا "الهدف" مفتاح العودة كل المدخلات في الصحيحين تقديم زر؟

هل هناك طريقة، ربما من خلال هذا الحدث الاعتراض نفسه، للكشف عن سياق بضغطة، حتى أتمكن من تصفية اختيار العناصر شكل التاريخ؟

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

المحلول

وتعيين سمة autocomplete في حقول النص الخاص بك إلى off:

opts.coreElement.find('input[type=text]').each(function() {
     $(this).attr('autocomplete', 'off');
});

وهذا يعمل على جميع المتصفحات الرئيسية (سفاري، فايرفوكس، IE).

نصائح أخرى

ولقد وجدت أنه من أجل منع الإجراء الافتراضي ل[دخول] أو [التبويب] الحدث الرئيسي لديك للاستماع لهذا الحدث KeyDown و مقبض / إلغائه.
بحلول الوقت keyup أو بضغطة يتم تشغيل الافتراضي لkeydown قد حدث بالفعل.

والجواب من أعمال وولونغ لكنها لم تجب على السؤال كلي. الحل المقترح هو تعطيل التاريخ من حقل إدخال النص. ولكن هناك طريقة لمعرفة ما حدث keypressed تأتي من إدخال النص أو من التاريخ؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top