jqueryUI منتقي التاريخ الحرائق الإدخال طمس قبل مرور تاريخ تجنب/الحل?

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

سؤال

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

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

المحلول

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

$('.selector').datepicker({
    onSelect: function(dateText) { /* validation here */ }
});

إذا كنت ترغب في الاحتفاظ بك و onblur-الأحداث، هل يمكن تأجيل المصادقة على السماح للمنتقي التاريخ لملء الحقل قبل الحرائق التحقق من صحة، مثل هذا:

$('#myform input').blur(function () {
    setTimeout(function () { /* validation here */ }, 1);
});
<ع> استخدام setTimeout للتعامل مع القضايا-التزامن قد تبدو وكأنها الإختراق، ولكن نظرا لطبيعة جافا سكريبت ترابط واحد، وأنها تعمل بشكل جيد جدا. جون ريسيغ من المحادثات مسج الشهرة عن ذلك في هذه مشاركة المدونة .

نصائح أخرى

ويمكنك أن تجرب هذا:

$(".date-pick").datepicker({
...
onSelect: function() {
this.focus();
},
onClose: function() {
this.blur();
}
...

ولقد وجدت الطريقة الوحيدة للحصول على الدوام كلا من لوحة المفاتيح ومنقار مختارة أحداث العمل كان مع التعليمات البرمجية التالية:

 $(".date-picker")
            .datepicker("option", "onSelect", function (dateText, inst) {
                // User Method
            })
            .change(function () {
                // User Method
            });

والمشكلة مع استخدام مجرد حدث طمس هي أن (عند اختيار) ومنتقي التاريخ وقع الحدث طمس على المدخلات قبل أن يتم تمرير قيمة لها.

Magnars الإجابة أعلاه هو جيد جدا.فقط لإعطاء بعض مزيد من المعلومات لذرية هنا هو أيضا النهج الذي يعمل بشكل جيد مع التحقق من صحة الأطر التي لا صحة على طمس.في الحقيقة أنا غير ملزم طمس الحدث الذي أنشئ قبل المصادقة على الوثيقة.جاهزة/pageload (شائع جدا نمط التحقق), ثم وضعه مرة أخرى في onclose الخيار منتقي التاريخ.في منتقي التاريخ الحدث على ما يبدو يحدث بعد منتقي التاريخ قد مرت المعلومات في هذا المجال ، لذلك لا بأس من أجل طمس التحقق من صحة تشغيل في تلك المرحلة.هذه الطريقة لا تفعل أي شيء خاص على الميدان في كود التحقق نفسها.إما نهج ربما ينطبق على ما يقوم به أي شخص آخر إذا كانت تأتي عبر هذا.

$('#datefield').datepicker(
{beforeShow: function(input) {
                             $(input).unbind('blur');
             },
 onClose: function(dateText, inst) {
                             $(this).validationEngine();this.focus();this.blur() }
});

(في إطار '.validationEngine()' هو ما يسجل التحقق من صحة معالجات)

والاهتزاز هذا الموضوع لأنه كان بعض الصعوبة مع حل مقبول.

ولقد وجدت أنها أسهل لتحريك "التغيير" الحدث عندما منتقي التاريخ في "عند_الإغلاق" وقع الحدث. هذا يضمن أن حدث تغيير عنصر المدخلات في حرائق دائما:

$('#my_element').datepicker({
    onClose: function() {
        $(this).trigger('change');
    }
});

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

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

$("inputText").bind('CustomEventName',function(){//your validate method code});

ووفي منتقي التاريخ

$("#inputText").datePicker({onClose:function(){ $(this).trigger('CustomEventName')});

وكان لي نفس المشكلة كما كنت، والجواب Magnar من ساعد ولكن لم تماما الإجابة على المشكلة.

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

وبالتالي، وبناء على الجواب Magnar انه ينص على أن تحتاج إلى إعادة التحقق من صحة-حقل الإدخال عند_التغيير من التقويم. الطريقة الأكثر وضوحا هو دعوة $("form").valid()، ولكن هذا ما يؤكد على النموذج بأكمله.

وهناك طريقة أفضل هو مجرد التحقق من صحة حقل إدخال متصلا منتقي التاريخ، والتي يمكن أن تؤدي إلى أنه من خلال القيام بذلك:

$('#myform input').blur(function () {
    var that = this;
    setTimeout(function () {
        $(that).trigger("focus").trigger("blur");
    }, 100);
});

والآن فقط التحقق من صحة حقل الإدخال الخاص بك، لأنك مزورة المستخدم النقر داخل وخارج حقل الإدخال.

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