Fix jQuery preference order to prevent conflicts with third-party widgets #354
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
When using django-select2 with Django admin (Grappelli or standard), other widgets
that load their own jQuery (like
PrettyJSONWidget,JSONEditor,django-summernote, etc.)can overwrite the global
jQueryvariable.Since
django_select2.jscurrently prefersjQueryoverwindow.django.jQuery: ```javascript factory(jQuery || window.django.jQuery)It uses the newly loaded jQuery instance which doesn't have Select2 attached, causing: $element.select2 is not a function
Solution
Reverse the preference order to use Django's protected jQuery instance first: factory(window.django.jQuery || jQuery)
This ensures Select2 functionality works regardless of what other widgets do to the global jQuery variable.
Related
This complements Fix #292 which ensures proper JS media loading order. That fix controls django-select2's own loading order, but can't prevent third-party widgets from loading jQuery afterward.