datepicker dd/mm/yy בדפדפן כרום
-
הייתה לי בעיה שכאשר אני רוצה להציג תאריך בפורמט הנ"ל, הולידציה תמיד בטוחה שזה בפורמט mm/dd/yy ושולחת לי שגיאה כשהיום גדול מ12 לחודש..
לאחר הרבה שבירת שיניים מצאתי שזו בעיה מוכרת עם דפדפן כרום,
והפתרון הוא להוסיף את הקוד הבא (שאין לי מושג מה בדיוק הוא עושה.. כלומר מה פירוש הביטוי:!/Invalid|NaN/.test
אם מישהו רוצה להסביר - אשמח <!-- s:-) --><img src="{SMILIES_PATH}/icon_e_smile.gif" alt=":-)" title="מחייך" /><!-- s:-) -->)
הנה הקוד המלא:jQuery.validator.methods.date = function (value, element) { var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor); if (isChrome) { var d = new Date(); return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateString(value))); } else { return this.optional(element) || !/Invalid|NaN/.test(new Date(value)); } };
זו התשובה השנייה בסטאק , מאחר שהראשונה כבר אינה רלוונטית היום.
פורסם במקור בפורום CODE613 ב19/04/2017 15:19 (+03:00)
-
// זה ליטרל של REGEX בJS.
כלומר /[A-z]/ זה יוצר מופע של REGEX שהpatern שלו זה [A-z].
לרגקס בJS יש כמה מתודות (exec ,test מ-RegExp, ועוד match, replace, search, split מהמחלקה string).
כלומר אם אתה כותב:/[A-z]/.test('a')
זה יחזיר true.
וכעת תוכל לחייך אחרי שתנסה בעצמך:/[n?ll]/.test(null)
הבנת? המתודה טסט מקבלת ארגומנט כטקסט. וnull מומר ל"null" כמיטב ה"עוצמה" של js.
כעת תבין את הקוד שהבאת.פורסם במקור בפורום CODE613 ב19/04/2017 19:13 (+03:00)
-
אגב לגוף הבעיה, לפי מה שאני רואה פה:
https://developers.google.com/web/updates/2012/08/Quick-FAQs-on-input-type-date-in-Google-Chrome#how_do_i_avoid_conflicts_between_the_jquery_datepicker_and_the_native_date_picker
הפתרון הוא לעשות type=""text" במקום date. ניסית?פורסם במקור בפורום CODE613 ב19/04/2017 19:23 (+03:00)
-
אם אני מבין נכון, מה שאמרת זה מועיל כדי למנוע התנגשות בין הdatepicker המובנה של כרום, ובין הdatepicker של בוטסטרפ או jqueryUI.
אבל זה לא פותר את הבעיה של הולידציה.צודק לגמרי. נכנסתי כמו עיור לתוצאה בגוגל, אח"כ שמתי לב שהבעיה היא הולידציה.
פורסם במקור בפורום CODE613 ב19/04/2017 21:33 (+03:00)
-
הייתה לי טעות, הקוד שהבאתי למעלה לא עובד, מאחר והמתודה: .toLocaleDateString(value) לא ממירה סטרינג.
לכן צריך לשנות את הקוד לקוד הזה:jQuery.validator.methods.date = function (value, element) { var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor); if (isChrome) { var d = value.split("/"); return this.optional(element) || !/Invalid|NaN/.test(new Date(d[1] + "/" + d[0] + "/" + d[2])); } else { return this.optional(element) || !/Invalid|NaN/.test(new Date(value)); } };
גם הוא מופיע שם בסטאק בהמשך התשובות..
פורסם במקור בפורום CODE613 ב23/10/2017 21:36 (+03:00)