قم بالوصول إلى https://harvesthq.github.io/chosen/ عبر iPad. يمكن أيضًا إعادة إنتاجه من خلال "شريط أدوات تبديل الجهاز" في وحدة تحكم Chrome ثم تحديد جهاز "iPad".
ضمن "تحديد متعدد" ، أضف عنصرًا.
الآن - بدون النقر فوق أي مكان آخر - انقر فوق "x" لإزالة العنصر المضاف. لا شيء يحدث.
يجب إزالة عنصر li.search-choice
. يجب إلغاء تحديد select.chosen-select option
.
عنصر li.search-choice
يبقى. يستمر تحديد select.chosen-select option
. الحدث chosen.click
لا ينطلق أبدًا.
الإصدار المختار : 1.8.7 (على موقع الويب المختار) و ~ 1
إصدار jQuery أو النموذج الأولي : 3.2.1 (على موقع الويب المختار) و 2.1.4 و 2.2.4
المتصفح والإصدار : Chrome ، الإصدار 70.0.3538.110 (Official Build) (64 بت)
نظام التشغيل والإصدار : Windows 10 ، الإصدار 1709 ، إصدار نظام التشغيل 16299.492
الحل البديل الذي يعمل في المستعرضات (من خلال "شريط أدوات تبديل الجهاز" في وحدة التحكم) ، ولكنه ليس أدنى حد بديهي ، هو:
li.search-choice
. ملاحظة: النقر فوق "x" لا يزال لا يفعل شيئًا.لا يبدو أن هذا يعمل على جهاز iPad فعلي فعلي.
يبدو أن النقرة لا تتم تهيئتها في الوقت المناسب عند إضافة عنصر.
مسح سريع لرمز Javascript المختار أرى أنه يتم التعامل مع الأحداث الأساسية التالية - فيما يتعلق بالنقر -:
mousedown
mousemove
mouseup
touchstart
touchmove
touchend
ما لا أراه هو التعامل مع الحدث من أجل:
pointerdown
pointermove
pointerup
ربما هذا له تأثير على الأمر؟
يمكن تأكيد أنه (على الأقل في Chrome يتظاهر بأنه جهاز iPad) لا يمكنك إلغاء تحديد العناصر من تحديد متعدد. النقر على علامة X لا يفعل شيئًا.
جئت عبر نفس المشكلة.
لقد وجدت أنه إذا كنت ستركز خارج الحقل المحدد (ليس فقط إغلاق الحقل ، ولكن في الواقع تركز على أي عنصر آخر) ، فإن أزرار X لا تزال لا تعمل. لكنك ستركز على هذا الحقل مرة أخرى (وعرض القائمة المنسدلة) ، الآن يمكنك حذف الخيارات بنجاح.
بمجرد إغلاق القائمة المنسدلة ، مرة أخرى ، X لا يعمل.
يمكنني إعادة إنتاج هذا على كل من محاكي الكروم والجهاز المادي.
فقط أن يكون واضحا. من خلال الخروج من العنصر ، تحتاج إلى جعل .chosen-container
لإسقاط فئة chosen-container-active
. عند إزالة chosen-container-active
من chosen-container
وتطبيقه مرة أخرى بتركيز جديد ، فإنه يعمل بشكل جيد في هذه اللحظة.
حسنًا ، لست متأكدًا من المشكلة بالضبط هنا ، لكنني جعلتها تعمل من أجلي.
أولاً أستخدم هذه الخيارات عند التهيئة:
el.chosen({
display_selected_options: false,
hide_results_on_select: false,
});
لبعض الأسباب المختارة تمنع أي تفاعلات مع عناصر التحكم عندما لا تركز على مجال ما.
لقد وجدت أنه عند النقر فوق الحقل الخارجي results_hide
يسمى ، وهذه الطريقة تمنع الحقل تمامًا من الوصول (على الأقل على الهاتف المحمول / الجهاز اللوحي). لذلك كنت أبحث عن طريقة لمنع هذا السلوك.
يبدو أن تعيين علامة results_showing
على false يسبب هذا الخطأ.
Chosen.prototype.results_hide = function() {
if (this.results_showing) {
this.result_clear_highlight();
this.container.removeClass("chosen-with-drop");
this.form_field_jq.trigger("chosen:hiding_dropdown", {
chosen: this
});
}
// removed because of mobile issue with removeing options
// return this.results_showing = false;
};
إزالته من المصدر (غير مريح ، ولكن لا يوجد خيار آخر الآن) ، يجب أن يؤدي الغرض.
لست متأكدًا مما يفعله هذا بالفعل ، لكن في الوقت الحالي لم ألاحظ أي آثار جانبية.
لقد قمت للتو بتعطيل المختار لجميع الأجهزة المحمولة والأجهزة اللوحية. لا تعرف ما إذا كانت واجهة التحديد المدمجة التي تعمل باللمس أكثر سهولة في الاستخدام من مربع الإدخال المختار. فقط في عداد المفقودين خيار البحث ، ولكن شعرت بأي حال من الأحوال غريب على جهاز يعمل باللمس.
خط 590:
AbstractChosen.browser_is_supported = function() {
if ("Microsoft Internet Explorer" === window.navigator.appName) {
return document.documentMode >= 8;
}
if (/iP(od|hone)/i.test(window.navigator.userAgent) || /IEMobile/i.test(window.navigator.userAgent) || /Windows Phone/i.test(window.navigator.userAgent) || /BlackBerry/i.test(window.navigator.userAgent) || /BB10/i.test(window.navigator.userAgent) || /Android.*Mobile/i.test(window.navigator.userAgent)) {
return false;
}
if ((/iPhone|iPod|iPad|Android|android|playbook|silk|BlackBerry/).test(navigator.userAgent))
{
return false;
}
if (/Android/i.test(window.navigator.userAgent)) {
if (/Mobile/i.test(window.navigator.userAgent)) {
return false;
}
}
return true;
};
هتافات
هانيس