Chosen: html5 مطلوب دعم السمة؟

تم إنشاؤها على ٤ مارس ٢٠١٢  ·  80تعليقات  ·  مصدر: harvesthq/chosen

عندما يتم التهيئة على إدخال محدد ، فإنه يضيف [style = " display: none "] إلى علامة التحديد وينشئ علامات div المتنوعة التي يحتاجها ، على النحو التالي.

<select name="country" id="country" style="display: none; " class="chzn-done">
    <option selected="selected" value=""></option>
    ...
</select>

هذا جيد ، ولكن لدينا مشكلة إذا أضفت السمة html5 "مطلوب" إلى علامة التحديد الخاصة بي ، والتي تنتج الترميز التالي بعد التهيئة المختارة:

<select name="country" id="country" required="required" style="display: none; " class="chzn-done">
<option selected="selected" value=""></option>
...
</select>

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

هذا يحدث في Chrome ، لست متأكدًا من سلوك المتصفحات الأخرى.

لم أتعمق بما يكفي لاقتراح حل ، ولكن هذه مشكلة حيث نبدأ في تضمين سمات html5 في نماذجنا.

Feature Request

التعليق الأكثر فائدة

+1

يمكن لأي شخص ارتكاب إصلاح لهذا؟ إنها مشكلة قديمة جدًا ووظائف مهمة جدًا في الوقت الحاضر. شكرا لك.

ال 80 كومينتر

لقد لاحظت مؤخرًا هذه المشكلة أيضًا.
مطلوب غير مدعوم في جميع المتصفحات ، لذلك قمت بإنشاء احتياطي للتكرار خلال عناصر النموذج عند الإرسال والتحقق من وجود بعض القيمة هناك عند وجود "مطلوب".
لا تزال المشكلة موجودة في Chrome لأن التحديد المخفي ليس له قيمة ولا ينبه المستخدم وفقًا لمستندات webkit:
http://trac.webkit.org/wiki/Styling٪20Form٪20Controls

"تتكون رسالة التحقق من أربعة عناصر div مع فئات زائفة وبعض العقد لنص الرسالة. يمكنك تخصيص المظهر عن طريق تغيير نمط هذه الفئات الزائفة."

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

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

ما هي حالة هذه القضية؟ لدي نفس المشكلة بالضبط مع الإصدار الأخير من Firefox (14.0.1)

نظرًا لاستخدام سمات HTML5 بشكل متزايد في مواقع الويب ، يجب معالجة هذا بطريقة أو بأخرى.

لدي نفس المشكلة أيضا. سأكون فضوليًا لمعرفة الحل الاحتياطي الخاص بك.

شكرا

يبدو أن هناك مشكلة رئيسية واحدة فقط ، ومشكلة ثانوية سيكون من الرائع حلها.

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

العنصر الأول هو العنصر الأكثر إشكالية. هل يمكن إصلاح ذلك باستخدام طريقة مختلفة لإخفاء عنصر التحديد؟ استبدال " display: none " في عنصر التحديد المخفي بـ "position: due؛ visibility: hidden؛" يقترب كثيرًا - على الرغم من أن ذلك سيعتمد أكثر على CSS المحيطة ...

لا يعمل مع Webkit بالرغم من ذلك. يبدو أن علامة الخطأ ترث أنماط مربع التحديد في webkit (Chrome) ، لذلك إذا قمت بتعيين العتامة: .5 ، ستكون العلامة أيضًا عتامة 0.5 (كمثال واحد). المشكله.

مرة أخرى - يعمل Opera بشكل صحيح كما هو ، ولكن إذا قمت بتغييره إلى CSS المستند إلى الموضع أعلاه ، فلن يعمل بشكل صحيح. ياله من ألم.

آسف لإرسال الرسائل غير المرغوب فيها حتى هذا. أعتقد أنني حصلت عليه رغم ذلك! إذا قمت بلف عنصر التحديد في نطاق ، واستخدمت CSS هذا على الغلاف (وأزلت العرض: لا شيء في عنصر التحديد):

width: 0px;
height: 0px;
overflow: hidden;
display: inline-block;
position: absolute;

ستحصل على رسالة الخطأ ولن يقطع تدفق الصفحة في نفس الوقت. المشكلة الوحيدة هي أنه يجب عليك ترك المربع مرئيًا لرؤية رسالة الخطأ لأن Firefox و WebKit سيخفيان الرسالة إذا لم تقم بذلك. يؤدي هذا إلى تلقي مربع التحديد لعلامات التبويب من خلال النموذج.

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

هناك أيضًا مشكلة تحديد المواقع الصغيرة ، والتي يمكن حلها عن طريق إجبار الموضع على أن يكون مباشرة تحت المربع المختار.

سيكون من الجيد أن ترى نوعًا من الدعم المدمج لهذا ، إذا كان ذلك ممكنًا على الإطلاق.

لقد كتبت تصحيحًا هنا: https://github.com/adcSTUDIO/chosen

قد لا يكون قويًا بما يكفي لإدراجه ، لكن لا تتردد في اختباره.

شكراCaptainN! سوف تحقق من ذلك!

CaptainN ، لقد

إذا لم يكن الأمر كذلك ، فلا بأس ، لقد ساعدت بالفعل كثيرًا في هذا الأمر. شكرا لك مرة أخرى!

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

CaptainN : لطيف جدا.

إنه يعمل جيدًا بالنسبة لي في Firefox 17 و Chrome 23.

في IE 8 + 9 (التي لا تدعم التحقق من صحة نموذج HTML5 على الإطلاق) ، عند تغيير قيمة الحقل ، أحصل على خطأ JavaScript بسبب استخدام محدد :valid غير المعروف. وبالتالي تم إحباط النص ولم يتم تقويض النموذج بأي شكل من الأشكال ، وهو ما توقعته في IE. : smirk: عدم إثارة خطأ سيكون أجمل ، رغم ذلك. اي فكرة؟

يا للقلق. أنا في الواقع أعتقد أن jQuery ستحميني أكثر! سأضطر إلى إضافة فحص IE أو شيء من هذا القبيل ...

كيفين ن.

CaptainN لديها مشكلة بالنسبة لي في Chrome أيضًا. لم أكن متأكدًا مما إذا كنت تعتقد أنها مشكلة في Firefox فقط أم لا. لكن يا صاح ، شكرا جزيلا مرة أخرى يا رجل. عمل رائع! دعنا نعرف ما إذا كنت قادرًا على معالجة شيء العرض على الرغم من ذلك.

يبدو أن jQuery يحتوي على بعض دعم محدد زائف مدمج ، ونظام خطافات بحيث يمكن للمكونات الإضافية إضافة إضافات خاصة بها ، وإذا لم يتم العثور على أي منها ، فإنها تمررها إلى التطبيق الأساسي - لذلك: مطلوب و: رمي خطأ صحيح في IE (وربما بعض إصدارات Safari) إذا لم يتم تعبئتها. سأرى ما إذا كان بإمكاني إلقاء نوع بديل من تسجيل الوصول هناك ، بدلاً من استخدام المحددات الزائفة. يبدو أنه يمكنني فقط التحقق من attr ("مطلوب") لاستبدال: مطلوب - ربما سأضطر إلى إجراء نوع من اكتشاف الميزات لـ: صحيح بالرغم من ذلك - ربما تحقق من خاصية .oninvalid؟

حسنًا ، لقد حصلت على تصحيح جديد يعمل على إصلاح خطأ IE (ويجب إصلاحه في أي متصفحات أخرى أيضًا). يغير هذا التصحيح بعض الأشياء (لا شيء يجب أن تلاحظه). ها هي ملاحظاتي:

  • تطابق نمط الترميز لمعالجات الأحداث الموجودة في إصدار jquery (ربط بدلاً من تشغيل ، إلخ.)
  • لا يمكنني الحصول على إصدار النموذج الأولي لإخفاء عنصر التحديد عند التحقق من صحته - يبدو أنه يتم قمع حدث تغيير عنصر النموذج بطريقة ما (يعمل بطريقة أخرى) - أعتقد أن هذا خطأ ، ولكنه ليس خطأً قدمته. بحاجة إلى مزيد من التحقيق.
  • هناك بعض المراوغات البسيطة حول موضع العنصر غير الصالح والتي قد تحتاج أحيانًا إلى تدخل يدوي من قبل المستخدم من خلال CSS (مشكلة فقط إذا تم استخدام الميزة المطلوبة).
  • تنتهي مربعات التحديد ذات العرض القصير بعلامات مطلوبة متجانسة في المتصفح (أيضًا مشكلة في عناصر تحديد الفانيليا إذا قمت بتعيين العرض من خلال css). لا يمكنني العثور على حل بديل (اسمح لي أن أعرف إذا فعلت ذلك!) ربما تناوله مع Mozilla ، لأنه سيحدث مع علب الفانيليا أيضًا. أيضًا ، ربما تحقق من امتدادات css الخاصة بهم؟ https://developer.mozilla.org/en-US/docs/CSS/CSS_Reference/Mozilla_Extensions؟redirectlocale=en-US&redirectslug=CSS_Reference٪2FMozilla_Extensions (لم أجد أي شيء في لمحة)
  • لا يمكنني جعل uglifyjs يعمل على Windows (لذلك لم يتم تحديث إصدارات .min.js في الريبو الخاص بي) - سأحاول إنشاء من OSX غدًا.

CaptainN بالنسبة إلى مشكلتك مع UglifyJS ، تأكد من تثبيت الإصدار 1 لأن الإصدار 2 ليس BC. # 915 يقوم بتحديث الحزم. json

كيف أقوم بتبديل الإصدار باستخدام npm؟

CaptainN npm install uglify-js@1 لفرض الإصدار 1 IIRC (لكنني لست خبيرًا في العقدة). الحل الآخر هو الخروج من فرعي وتشغيل npm install مع ملف bund.json المحدث.

لقد تمكنت من إنشاء الإصدارات المبهمة على جهاز Mac الخاص بعملي (ربما يحتوي على إصدار أقدم من uglify-js؟). هم الآن محدثين في الريبو الخاص بي.

أنا أستخدم فقط نكهة jQuery حاليًا. لا يوجد خطأ في البرنامج النصي في IE8 / 9 بعد الآن. : +1: لمشاهدة هذه الميزة في المنبع قريبًا.

نحن أيضا نواجه هذه القضية. هل هناك حل باستثناء تعطيل التحقق من صحة HTML5؟
CaptainN أصلحه مما قرأته. لذلك جربت ملف selected.jquery.js الخاص به في الفرع الرئيسي. لكنه يعطي خطأ js من msie غير محدد.

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

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

شكرا!

: +1:

هل يمكن لشخص ما أن يلخص هذا لي؟ هل هناك شوكة أو رقعة حولها جاهزة للإنتاج؟

هناك طلب سحب يتماشى مع هذا - # 900 والذي من شأنه أن يسحب شوكة adcSTUDIO / المختارة.

بدلاً من إخفاء مربع التحديد الأصلي - عندما يكون التحديد مطلوبًا ، وعندما يكون هناك خطأ ، يضع التصحيح مربع التحديد أسفل مربع التحديد المختار ، بحيث تظهر رسالة خطأ HTML5 المضمنة في الموقع الصحيح. تحرير: ربما ينبغي أن أشير إلى أنه إذا لم يتم وضع علامة على المربع على أنه "مطلوب" ولم يتم إبطال مفعوله مطلقًا ، فسيتم الاحتفاظ بالسلوك الحالي.

لا يضيف طلب السحب هذا أي وظائف إضافية خارج عرض إشعارات خطأ HTML5 المضمنة.

شكرا كيفن!

2013/7/29 Kevin Newman [email protected]

هناك طلب سحب يتماشى مع هذا - # 900 https://github.com/harvesthq/chosen/issues/900 الذي سيسحب شوكة adcSTUDIO / المختارة.

بدلاً من إخفاء مربع التحديد الأصلي - عندما يكون التحديد مطلوبًا ،
وعندما يكون هناك خطأ ، فإن التصحيح يضع مربع التحديد تحته
مربع التحديد المختار ، بحيث تظهر رسالة خطأ HTML5 المضمنة في
الموقع الصحيح.

لا يضيف طلب السحب هذا أي وظائف إضافية خارج نطاق
عرض إشعارات خطأ HTML5 المدمجة.

-
قم بالرد على هذه الرسالة الإلكترونية مباشرة أو tHubhttps: //github.com/harvesthq/chosen/issues/515#issuecomment -21750086
.

أورس برام
مواقع Macht

الترخيص. فيل. أنا

ثياتر بلاتز 2
3011 برن
هاتف. Büro: +41 31311 73 61
هاتف. Mobil & Combox: +41 76327 01 51
http://www.ursbraem.ch

بريفا:
Beundenfeldstr. 50
3013 برن
رقم الهاتف +41 31301 41 90

أهلا،
لقد حصلت للتو على أحدث إصدار (1.0) وما زلت أواجه هذه المشكلة. عند الاختيار ، تتم إضافته إلى مربع التحديد بالسمة المطلوبة ، في Firefox ، يظهر تلميح أداة "الرجاء تحديد عنصر من القائمة" في الزاوية اليسرى العلوية من الشاشة. في Chrome لا شيء يحدث على الإطلاق. هل طلب السحب غير متكامل مع الإصدار 1.0؟ كيف يمكنني تنزيل هذا التصحيح؟ آسف أنا لست أكثر دراية بـ Github وشكرا مقدما!

لا أعتقد أنه تم دمج تغييراتي. ربما تحتاج الشوكة الخاصة بي إلى التحديث أيضًا - لقد مر وقت طويل.

آه ، هذا سيء للغاية. هل لديك أي فكرة عما إذا كانت على خط أنابيب الفرع الرئيسي؟ أي اقتراحات لجعل هذا يعمل في هذه الأثناء؟

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

هنا مفترق الطرق: https://github.com/adcSTUDIO/chosen

شكرا كيفن.


يارون جويز
رئيس مهندس البرمجيات
MedAdaptics - http://medadaptics.com
(781) 767-7434

يوم الأربعاء ، 27 تشرين الثاني (نوفمبر) 2013 الساعة 12:35 ظهرًا ، كيفن نيومان [email protected]

هنا مفترق الطرق: https://github.com/adcSTUDIO/chosen

-
قم بالرد على هذه الرسالة الإلكترونية مباشرة أو tHubhttps: //github.com/harvesthq/chosen/issues/515#issuecomment -29403732
.

CaptainN هل فتحت

هناك رقم 900 PR # - إنه نوع من الفوضى - ربما يمكنني إعادة وضعه في مرحلة ما ، وتنظيفه إذا كان سيساعد.

<حدد مطلوبًا> دعم السمة للمكوِّن الإضافي المختار

أهلا!
كل شيء بسيط للغاية ، ولا تحتاج إلى عامين لمناقشته :)
CaptainNyaronguezstofkenearley

لإضافة رسالة خطأ مستعرض صحيحة مع اختيار من أجل <تحديد مطلوب> عندما لا يختار المستخدم أي خيار ،

  1. إزالة العرض: لا يوجد إعداد لتحديد علامة من كود JS للمكون الإضافي.
  2. التفاف في علامة <select> في التفاف <div> ، ثم إضافة CSS position: النسبي ؛ لهذا <div> في CSS الخاص بك.
  3. إضافة موقع: مطلق؛ مقطع: مستطيل (0،0،0،0) ؛ لإخفاء علامة <select> في كود JS للمكون الإضافي.

إذا كنت لا ترغب في قضاء الوقت في تعديل كود البرنامج المساعد ، فما عليك سوى إضافة شيء مثل setAttribute ('style'، 'display: visual؛ position: absolute؛ clip: rect (0،0،0،0)')؛ بعد تهيئة المكون الإضافي المختار.

مثال:

 وظيفة InitChosen () {
  $ ('select.chzn'). كل (وظيفة (فهرس) {
  $ (هذا). المختار ({
  Disable_search_threshold: 5 ،
  no_results_text: "Ничего не найдено!"
  }) ؛
  this.setAttribute ('style'، 'display: visual؛ position: Absolute؛ clip: rect (0،0،0،0)')؛
  }) ؛
 }

هذا كل شئ. Aaaaaand الآن ... DISCO! :)
** للمتصفحات التي تدعم السمة "مطلوب".

كروم

--2

ثعلب النار

--1

Aharito ألن نواجه مشكلة ترتيب علامات التبويب من خلال تنفيذ هذا؟

شكرًا Aharito ، إنه يعمل بشكل رائع مع استبدل $('select.chzn') بـ $('.chosen-select') .

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

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

لقد قمنا بتوحيد هذا عبر جميع المكالمات إلى $().chosen()

$.fn.oldChosen = $.fn.chosen
$.fn.chosen = function(options) {
  var select = $(this)
    , is_creating_chosen = !options || _.isObject(options)

  if (is_creating_chosen && select.css('position') === 'absolute') {
    // if we are creating a chosen and the select already has the appropriate styles added
    // we remove those (so that the select hasn't got a crazy width), then create the chosen
    // then we re-add them later
    select.removeAttr('style')
  }

  var ret = select.oldChosen(options)

  if (is_creating_chosen) {
    // https://github.com/harvesthq/chosen/issues/515#issuecomment-33214050
    // only do this if we are initializing chosen (no params, or object params) not calling a method
    select.attr('style','display:visible; position:absolute; clip:rect(0,0,0,0)');
  }
  return ret
}

ghiculescu هذا لا يحل مشكلة tabbing أو shift-tabbing في التحديد ، أليس كذلك؟

DASPRiD كلا .

ماذا عن هذا كحل محتمل للتستر.

إنه ليس مثاليًا ، ولكنه في الواقع يمنع التحديد الأصلي من الظهور عن طريق تمرير التركيز إلى مربع الحوار المحدد التالي ، ولكن ربما يكون خطوة أخرى أقرب

"selected-select" هو مجرد محدد للاختيارات التي أجريها مع فئة معينة ، ولست متأكدًا مما إذا كان "تركيز النقر" يغطي جميع الأحداث ذات الصلة التي يجب أن أعلقها ، ولكن ربما يمكن لشخص ما أن يقول ما هو مفقود أيضًا؟

من الممكن أيضًا أنني أساءت فهم شيء ما حول بنية html المختارة ووجدت أن ("أ") ليبرالية للغاية ، هل من أحد لديه المزيد من الخبرة؟

$(".chosen-select").on("click focus",function(event){
    $(this).next(".chosen-container").find("a").trigger(event.type);
});

أوه، وبالتأكيد " عرض: مرئية " يجب أن يكون " عرض: كتلة " أو شيء من هذا؟ السبب v isibility: المرئي صالح ، لكن العرض: مرئي أنا متأكد من أنه ليس كذلك

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

لقد قمت بحل هذا عن طريق فصل وإعادة توصيل الحاوية المختارة ، على هذا النحو

$(".chosen-select").each(function(){
    $(this).next(".chosen-container").prepend($(this).detach());
});

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

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

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

أعتقد أنه يعمل بشكل جيد.

$(".chosen-select").each(function(){
    //    take each select and put it as a child of the chosen container
    //    this mean it'll position any validation messages correctly
    $(this).next(".chosen-container").prepend($(this).detach());

    //    apply all the styles, personally, I've added this to my stylesheet
    $(this).attr("style","display:block!important; position:absolute; clip:rect(0,0,0,0)");

    //    to all of these events, trigger the chosen to open and receive focus
    $(this).on("click focus keyup",function(event){
        $(this).closest(".chosen-container").trigger("mousedown.chosen");
    });
});

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

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

بعد قراءة طويلة جدًا ، اعتقدت أنني جربت الاقتراحات المقدمة على مر السنين.

لسوء الحظ ، لم أستطع الحصول على الكود من christhomas للعمل. أقوم باستدعائها ضمن وظيفة إرسال بدون نتائج مرئية (لا توجد أخطاء أيضًا).

الخبر السار هو أن الوظيفة الجديدة من قبل ghiculescu تعمل مثل علاج حيث لا يزال بإمكاني استخدام ملف CDN المختار واستخدام الوظيفة في ملف js الخاص بي.

charettesDASPRiD ما هل التبويب يعني لا يعمل مع وظيفة تعديل؟ يبدو أن العمل بالنسبة لي

سهل بما يكفي لإضافة tabindex: -1 إلى select toghiculescu 's snippet ، حل مشكلة tabbing.

مثال: http://jsfiddle.net/hq7b426j/

أستطيع أن أرى المشكلة الآن! إضافة الخاص بك تعمل بشكل رائع andreialecu

كانت هناك إضافة أخرى مطلوبة بالمناسبة. على iPhone أو الأجهزة الأخرى غير المدعومة ، لن يعمل الكمان بشكل صحيح. تم اختياره لتعطيل نفسه على iPhone وترك <select> تغيير ، وسيخفيه الكود الموجود في العداد أعلاه ، ولا يترك أي طريقة للتفاعل مع التحديد.

يعمل هذا الكمان على إصلاحه (عن طريق إضافة عرض: لا شيء):
http://jsfiddle.net/hq7b426j/1/

آه هذا أفضل !! شكرا! ما زلت أختبر أيضًا ، لكنني سأقوم بالنشر إذا ظهر أي شيء آخر

CaptainN يرجى إيجاز لدي نفس المشكلة. wr أحتاج إلى وضع هذا الرمز. أنا أستخدم سمة inspina من التفاف بوتستراب.

@ vidhyaprakash85 لست متأكدًا مما https://github.com/adcSTUDIO/chosen

أنا أستخدم بالفعل https://github.com/harvesthq/chosen كيفية القيام بذلك :(

andreialecu كودك يعمل بشكل جيد! شكرا!!!

شكرًا christhomas لقد نجحت التعليمات البرمجية بشكل رائع: راقصة:

لاchristhomas أوghiculescu عملت بالنسبة لي باستخدام متعددة مجمعة تحديد. تركه للتحقق من صحة الخادم في الوقت الحالي.

عندما جربت التصحيح ghiculescu ،
عندما جربت التصحيح christhomas ، ظهرت

اضطررت إلى تعديل البرنامج النصي ghiculescu حتى يمكنني الاتصال مرتين على هذا النحو:

target.find('select')
        .chosen('destroy')
        .chosen({disable_search_threshold: 10})

خلافًا لذلك ، أزلت الرحلة الثانية النمط الذي تمت إضافته في الأولى:

$.fn.oldChosen = $.fn.chosen
$.fn.chosen = function(options) {
  var select = $(this)
    , is_creating_chosen = !!options

    var style = 'display:visible; position:absolute; clip:rect(0,0,0,0);'

        if (is_creating_chosen && select.css('position') === 'absolute' && select.attr('style') != style) {
            // if we are creating a chosen and the select already has the appropriate styles added
            // we remove those (so that the select hasn't got a crazy width), then create the chosen
            // then we re-add them later
            select.removeAttr('style')
        }

        var ret = select.oldChosen(options)

        // only act if the select has display: none, otherwise chosen is unsupported (iPhone, etc)
        if (is_creating_chosen && select.css('display') === 'none') {
            // https://github.com/harvesthq/chosen/issues/515#issuecomment-33214050
            // only do this if we are initializing chosen (no params, or object params) not calling a method
            select.attr('style', style);
            select.attr('tabindex', -1);
        }
        return ret
}

لقد أضفت للتو هذا الشرط الإضافي إلى الحالة الأولى إذا: && select.attr('style') != style

doganmeh يعمل بشكل رائع في Chrome والجوال (مع Chrome) ولكن تم اختباره في Firefox 53.0 حيث لا يعمل

حتى هذا http://jsfiddle.net/hq7b426j/1/ لا يعمل في Firefox 53.0

حسنًا ، ولكن هذا يبدو أشبه بمشكلة في Firefox لأنك إذا نقرت على الزر مرات عديدة ، فسترى أن Firefox يحاول عرض الرسالة (ولكن لا يتم عرض هذا بشكل كامل أبدًا)

لقد استخدمت هذا الحل. إنه بسيط للغاية ويعمل بشكل مثالي:

<style>
    select.submitted:invalid + .chosen-container{
        border-color: red !important;
    }
</style>
$('#yourSelector').chosen({
                no_results_text: "yourText",
                disable_search_threshold: 9,
                search_contains: true
                //your parameters
    }).on('invalid', function(){
        $(this).addClass('submitted');
    });

يبدو أن هذا لا يعمل إذا اخترت مع اختيارات متعددة:
http://jsfiddle.net/jeromax/o5a8aogh/

أصلحتها.

"
$ .fn.oldChosen = $ .fn.chosen
$ .fn.chosen = الوظيفة (خيارات) {
var حدد = $ (هذا) ،
is_creating_chosen = !! خيارات ؛

إذا (is_creating_chosen && select.css ('موضع') === 'مطلق') {
// إذا كنا بصدد إنشاء مجموعة مختارة وتم بالفعل إضافة الأنماط المناسبة إلى التحديد
// نقوم بإزالة هؤلاء (بحيث لا يحتوي التحديد على عرض مجنون) ، ثم نقوم بإنشاء الملف المختار
// ثم نعيد إضافتها لاحقًا
select.removeAttr ("النمط") ؛
}

var ret = select.oldChosen (خيارات)

// التصرف فقط إذا تم عرض التحديد: لا شيء ، وإلا فإن الاختيار غير مدعوم (iPhone ، إلخ)
إذا (is_creating_chosen && select.css ('display') === 'none') {
// https://github.com/harvesthq/chosen/issues/515#issuecomment -33214050
// افعل هذا فقط إذا كنا نبدأ (بدون معلمات أو معلمات كائن) لا نستدعي طريقة

  $(this).each(function(index){
      if($(this)[0].multiple==true){
          $(this).attr('style','display:visible; width:0px; height:0px; margin-top:25px; position:absolute; clip:rect(0,0,0,0)');
      }else{
          $(this).attr("style","display:visible; position:absolute; clip:rect(0,0,0,0)");
      }
  })

select.attr ('tabindex'، -2) ؛

}
عودة ret
}
"

+1

يمكن لأي شخص ارتكاب إصلاح لهذا؟ إنها مشكلة قديمة جدًا ووظائف مهمة جدًا في الوقت الحاضر. شكرا لك.

لا يعمل على أحدث إصدار.

يبدو أن هذا يكسر التحقق من صحة النموذج angular.js عند استخدام اختيار الزاوية الزاوية أيضًا.

إنه 2018 وما زلنا نواجه نفس المشكلة. إنه لأمر جحيم كيف لا تعمل معايير HTML بشكل صحيح ومتكاملة مع المكونات الإضافية الخارجية. أوقات مجنونة :)

هذا يكسر المكون الإضافي الذي اختاره دروبال أيضًا. انظر https://www.drupal.org/project/chosen/issues/2705891

تعذر العثور على أي حل مناسب لهذا بخلاف الحل:

<div class="form__select">
  <select class="chosen">
    <!-- options -->
  </select>
</div>
.form__select {
    position: relative;
}

.form__select .chosen {
    display: block !important;
    height: 0;

    position: absolute;
    left: 35px;
    bottom: 0;

    outline: none;
    border-color: white;

    pointer-events: none;
}

إذا كنت تستخدم Chosen لجميع عناصر select ، يمكنك استخدام CSS لتغييرها وجعلها مرئية (لـ DOM) ، لكن بدون عتامة ، لا ارتفاع ، موضع مطلق.

تستهدف محددات CSS هذه عناصر تحديد غير صالحة ، حيث يستهدف أحدها multiple مضيفًا 15px margin-top لتوسيطه على عناصر التحديد المتعدد.

select:invalid {
    height: 0px !important;
    opacity: 0 !important;
    position: absolute !important;
    display: flex !important;
}

select:invalid[multiple] {
   margin-top: 15px !important;
}

عرض: http://jsfiddle.net/tripflex/2zdeu9oc/

ولكن في الحقيقة ... يجب أن يتم التعامل مع هذا بالفعل بواسطة Chosen.JS lib

هذا هو الحل الخاص بي ، إذا كان مفيدًا:

// Initialise Chosen
$(function () {
    $('select').chosen();
});

// Place the original input behind the Chosen input, matching the height and width so that the warning appears in the correct position
$('select').on('chosen:ready', function () {
    const height = $(this).next('.chosen-container').height();
    const width = $(this).next('.chosen-container').width();

    $(this).css({
            'position': 'absolute',
            'height': height,
            'width': width,
            'opacity': 0
        })
        .show();
});

jonathanbull هل يمكنك إظهارها ضمن السياق؟ لقد جربت الحل الخاص بك ولم ينجح.

AndrewSouthpaw هذا هو الكود الخاص بي ، الإصلاحات تعمل بشكل جيد بالنسبة لي :)

$("#select").val([]); // disable default selection by browser
$('#select').on('chosen:ready', function(evt, params, chosen) {
    $(this).css({'position': 'absolute', 'height': 0, 'opacity': 0}).show();
});
$("#select").chosen();

أنا أستخدم رمزًا مختلفًا قليلاً (بناءً على الكود هنا):

$('.chosen-select').on("chosen:ready", function (evt, data) {
  $(this)
    .addClass('chosen_hidden')
    .attr('tabindex', '-1')
    .prependTo(data.chosen.container)
    .show()
  })
  .chosen({width: '100%'})
.chosen_hidden {
  position: absolute;
  top: 0;
  bottom: 0;
  max-height: 100%; // required for IE 10
  // **not required** opacity: 0;
}

لا يتعامل مع إجراء "التدمير" ، ولكنه يضع رسالة الخطأ بشكل جيد ويبدو أنه يعمل على Firefox و Chromiun. نظرًا لأن المحدد الأصلي غير مخفي ، فإن حد تمييز الخطأ يكون مرئيًا. تحديث : مع max-height يعمل أيضًا على IE. تحديث آخر : أضف tabindex -1 للتأكد من أنه لا يتلقى التركيز. (مع الاستمرار في التركيز وتلقي رسائل الخطأ).

كان هناك علاقات عامة مفتوحة لحل هذه المشكلة ، لكنني أعتقد أنها ضاعت منذ إغلاق الخيط الآخر الذي استهدفه. انظر # 2594

سيحبjhedstrom رؤية ذلك مدمجًا. هل تعرف ما إذا كانت هذه المكتبة لا تزال قيد الصيانة؟

لقد استخدمت شيئًا مشابهًا لحلeloyesp أعلاه

https://github.com/harvesthq/chosen/pull/2594#issuecomment -714806139

شكرا jhedstrom لتوجيهي في الاتجاه الصحيح!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات
يستخدم موقع bleepcoder.com معلومات GitHub المرخصة بشكل عام لتزويد المطورين حول العالم بحلول لمشاكلهم. نحن لسنا تابعين لشركة GitHub، Inc. أو مع أي مطورين يستخدمون GitHub لمشاريعهم. نحن لا نستضيف أيًا من مقاطع الفيديو أو الصور على خوادمنا. جميع الحقوق تنتمي إلى أصحابها.
مصدر هذه الصفحة: مصدر

لغات البرمجة الشعبية
مشاريع GitHub الشعبية
المزيد من مشاريع GitHub

© 2024 bleepcoder.com - Contact
Made with in the Dominican Republic.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.