עזרה (קטנה?) בקוד
-
כי יש לי תקיעה רצינית.
ואולי אפרט יותר.
אני באמצע בניית תוסף לפורום שבנוי על XENFORO.
בטופס שבתוך התוסף אמור להיות אפשרות בחירה מרשימה ענקית של סיווגים (סיווגים מקצועיים - כמו מפתח סיווגים של מדריך). וצריך שיהיה אפשרות בחירה מרובה.
רציתי לעשות אפשרות בחירה בselect2 (כך כל אחד יוכל לבחור הכי נח את הסיווג שהוא רוצה) אבל כאמור לא הצלחתי להטמיע את הספריה החיצונית בפריימוורק הזה (אם זה יעזור אני מצרף לינק).למעשה כרגע השגיאה האחרונה שקיבלתי היתה
Uncaught TypeError: $(...).select2 is not a function at c.init (<anonymous>:7:28) at c (core-compiled.js?_v=adc54a0b:117) at e (core-compiled.js?_v=adc54a0b:117) at HTMLSelectElement.<anonymous> (core-compiled.js?_v=adc54a0b:117) at Function.each (jquery-3.2.1.min.js?_v=adc54a0b:2) at r.fn.init.each (jquery-3.2.1.min.js?_v=adc54a0b:2) at Object.f [as initialize] (core-compiled.js?_v=adc54a0b:117) at Object.activate (core-compiled.js?_v=adc54a0b:43) at core-compiled.js?_v=adc54a0b:239 at HTMLDivElement.complete (core-compiled.js?_v=adc54a0b:14)
-
אולי הסיבה שהוא לא מזהה זה כיון שהייבוא לא מגיע לאותו הסקופ.
כיון שהקוד כרגע הוא ככה
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script> <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css" rel="stylesheet" /> <script> XF.Runselect = XF.Element.newHandler({ init: function(){ $('.js-example-basic-multiple').select2({ tags: true, tokenSeparators: [',', ' '], }); this.alert(); }, alert: function(){ alert('The text changed to red and underline...'); } }); XF.Element.register('Runselect', 'XF.Runselect'); </script> <xf:select data-xf-init="Runselect " class="js-example-basic-multiple" multiple="multiple"> <xf:option value="1"> orange </xf:option> <xf:option value="2"> apple </xf:option> <xf:option value="1"> banana </xf:option> </xf:select>
כלומר הפונקציה נמצאת בתוך סקופ של XF לעומת שורת הרפרנס שנמצאת בחוץ.
יש צורה לקרוא לקוד של הרפרנס מתוך הסקופ ולא ברפרנס למעלה? -
-
@dovid אמר בעזרה (קטנה?) בקוד:
לא רואה שום סיבה שלא יעבוד.
ממילא קשה לי להביא פתרונות.
תוכל לוודא שהjQuery עובד ע"י console.log
לערכים:
$
select2בstackoverflow כתוב שלעיתים זה לא עובד בגלל טעינה כפולה של jQuey. תבדוק את זה בבקשות בכרטסת network של כלי המפתחים בדפדפן.
זה הלוג אחרי שהרצתי את הפקודות הנ"ל. = אין לו את select2
$ ƒ (a,b){return new r.fn.init(a,b)} select2 VM4287:1 Uncaught ReferenceError: select2 is not defined at <anonymous>:1:1 console.log($) VM4406:1 ƒ (a,b){return new r.fn.init(a,b)} undefined console.log(select2) VM4421:1 Uncaught ReferenceError: select2 is not defined at <anonymous>:1:13
עריכה: התוצאה דומה גם כשהרצתי את זה מתוך הקוד ולא רק בקוסנסולה.
-
@מנצפך אמר בעזרה (קטנה?) בקוד:
@chagold אמר בעזרה (קטנה?) בקוד:
טכנית אין אפשרות כי זה בתוך הפרימוורק שלהם
לא הבנתי.
זה מערכת פורומים שיש להם טכניקה ספציפית שלהם כדי שאני יוכל להריץ פונקציות (כמו שרואים בקוד שהבאתי לעיל). אין לי אפשרות להכניס את הטכניקה שלהם לתוך codepen.
-
@chagold אמר בעזרה (קטנה?) בקוד:
$('.js-example-basic-multiple').select2({
tags: true,
tokenSeparators: [',', ' '],
});נסה לעטוף את הקוד בפונקציית jquery נוספת, ככה:
$(function(){ $('.js-example-basic-multiple').select2({ tags: true, tokenSeparators: [',', ' '], }); });
המשמעות של זה היא onReady. פה זה עזר למישהו https://stackoverflow.com/a/43391779/1271037
-
@dovid אמר בעזרה (קטנה?) בקוד:
התברר שהתוכנה של XENFORO משתמשת באיזה מקום בפורום שלהם ב-SELECT2, מה שמאשש את הכיוון של @dovid שהסיבה היא שיש פעמיים קריאה לקוד
ניסתי ללכוד את הקוד שהם השתמשו איתו לצרכי, ללא הצלחה.
אז ניסיתי עכשיו להתשמש עם ספריה אחרת בשם chosen אבל התוודעתי לכך שהשגיאה נמצאת ם שם. אולי כיון שselect2 בנוי על chosen.
יש ספריה שלישית שאני יכול לממש איתה את זה אולי?