我正在开发一个使用Rails 4.2.6的Ruby On Rails应用程序。我同时使用了Turbolinks和jquery.turbolinks(抱歉,我作为新手无法在网站上发布这些元素的链接)。我的问题非常简单,但我就是解决不了。它在这里:
我有一个通过AJAX获取的表单
<div class="card-footer">
<a class="btn btn-sm btn-primary-outline" data-remote="true" href="/profiles/Mke5kA/positions/new"><i class="fa fa-plus"></i> Nouvelle expérience professionnelle</a>
<div id="new_position_form"></div>
</div>
该表单包含通过 AJAX 获取数据的 Select2 元素。
= simple_form_for [profile, position], remote: true, html: {id: 'positionForm', class: 'm-b-1'} do |f|
= f.input :company_id, as: :select, input_html: {:'data-behaviour' => 'company-select2', :'data-kind' => 'company'}
= f.input :title
= f.input :summary
- location = f.object.build_location
= f.simple_fields_for :location do |l|
= render 'locations/fields', l: l, city: position.city
= render "profiles/shared/date_fields", f: f, model: position
= f.input :skill_list, as: :select, input_html: {multiple: true, :data => {:behaviour => 'acts-as-taggable', :'taggable-context' => 'skills'}}
%button.btn.btn-primary{:type => "submit"}= icon('check-square-o', 'Enregistrer')
= link_to icon('remove', 'Annuler'), 'javascript:void(0)',
data: {:'lgnk-behaviour' => "remove-form", :'lgnk-target' => "#positionForm" }, class: 'btn btn-secondary'
- 目前,Select2元素是在Rails Trubolinks事件"page:load page:update"上“激活”的,但我也尝试过“page:change”
- 当表单被获取时:select2元素很好(正确激活):
当我尝试在使用AJAX获取数据的Select2中输入时,出现了问题:所有的Select2都被复制了:
以下是初始化Select2的方法:
var loc_tag = function() {
$('[data-behaviour="acts-as-taggable"]').not('.select2-hidden-accessible').each (function (index, element) {
if ($(element).data('value')) {
var options = $(element).data('value').split(', ');
$.each(options, function(key, tag){
$(element).append($('<option selected></option>').val(tag).text(tag));
});
}
$(element).select2({
ajax: {
url: "/tags?context="+$(element).data('taggable-context'),
dataType: 'json',
headers: {
"Accept": "application/json"
},
delay: 250,
data: function (params) {
return {
q: params.term, // search term
page: params.page
};
},
processResults: function (data, page) {
return {
results: data
};
},
cache: true
},
escapeMarkup: function (markup) { return markup; }, // let our custom formatter work
minimumInputLength: 2,
tags: true,
language: "fr",
theme: "bootstrap",
width: "100%",
placeholder: 'Mots clés...'
});
});
};
$(document).on('page:load page:update', loc_tag);
我希望Select2元素仅在表单获取时初始化,而不是在它们获取数据的AJAX响应上进行初始化。我尝试在使用Select2的元素上使用jQuery.not(“ .select2-hidden-accessible”)(select2-hidden-accessible是Select2添加到已初始化Select2元素的类),但它不起作用。
非常感谢您的帮助!
document.addEventListener('turbolinks:before-cache', function() { $('.select2-hidden-accessible').select2('destroy'); });
。 - Piozif($('.select2-input').first().data('select2'))
条件来检查只有在该输入框附加了select2
时才销毁。 - Amit Patel