2016-12-03 2 views
3

Я использую select2.js на веб-сайте мю .Language моего веб-сайта заполнить персидская .I выберите элемент с этой опциейПочему Framework Select2 не может найти символ юникода?

<select name="TrainDeparture" class="full-width select2" id="TrainDeparture"> 
    <option value="165">كرج</option> 
</select> 

ЯШ:

(function ($) { 
    "use strict"; 

    $.fn.select2.locales['fa'] = { 
     formatMatches: function (matches) { return matches + " نتیجه موجود است، کلیدهای جهت بالا و پایین را برای گشتن استفاده کنید."; }, 
     formatNoMatches: function() { return "نتیجه‌ای یافت نشد."; }, 
     formatInputTooShort: function (input, min) { var n = min - input.length; return "لطفاً " + n + " نویسه بیشتر وارد نمایید"; }, 
     formatInputTooLong: function (input, max) { var n = input.length - max; return "لطفاً " + n + " نویسه را حذف کنید."; }, 
     formatSelectionTooBig: function (limit) { return "شما فقط می‌توانید " + limit + " مورد را انتخاب کنید"; }, 
     formatLoadMore: function (pageNumber) { return "در حال بارگیری موارد بیشتر…"; }, 
     formatSearching: function() { return "در حال جستجو…"; } 
    }; 

    $.extend($.fn.select2.defaults, $.fn.select2.locales['fa']); 
})(jQuery); 
$('.select2').select2(); 

Когда я набираю в окне поиска в выбор2

ك

CHARACT er показать сообщение, что ничего не найдено, но это неправильно.

Я добавляю арабский язык к своей клавиатуре и проверяю. В этом случае select2 найдено слов. Теперь, как я могу это исправить?

jsbin link

+1

какая у вас кодировка страницы? JavaScript (который используется в библиотеке select2) понимает только utf8/utf16. Ваша кодировка страницы должна соответствовать этому (см. Раздел 'head' вашей страницы). Кодирование страницы важно здесь, потому что данные поступают в JS из элемента 'select' html, поэтому важно, что источником данных является кодировка HTML => – smnbbrv

+0

Я использую в разделе главы – programmer138200

+0

вы могли бы попытаться пойти с utf16? – smnbbrv

ответ

0

У меня была аналогичная проблема. Я создал пользовательский соединитель.

function customMatcher (params, data){ 
    // Always return the object if there is nothing to compare 
    if ($.trim(params.term) === '') { 
     return data; 
    } 

    if (data.children && data.children.length > 0) { 
     // Clone the data object if there are children 
     // This is required as we modify the object to remove any non-matches 
     var match = $.extend(true, {}, data); 

     // Check each child of the option 
     for (var c = data.children.length - 1; c >= 0; c--) { 
      var child = data.children[c]; 

      var matches = customMatcher(params, child); 
      // console.log(matches); 

      // If there wasn't a match, remove the object in the array 
      if (matches == null) { 
       match.children.splice(c, 1); 
      } 
     } 

     // If any children matched, return the new object 
     if (match.children.length > 0) { 
      return match; 
     } 

     // If there were no matching children, check just the plain object 
     return customMatcher(params, match); 
    } 

    var original = data.text.normalize('NFD').replace(/[\u0300-\u036f]/g, "").toUpperCase(); 
    var term = params.term.normalize('NFD').replace(/[\u0300-\u036f]/g, "").toUpperCase(); 

    // Check if the text contains the term 
    if (original.indexOf(term) > -1) { 
     return data; 
    } 

    // If it doesn't contain the term, don't return anything 
    return null; 
} 
$('select').select2({ 
    matcher: customMatcher 
}); 

Главное отличие от первоначального заключается в том, как диакритики удаляются.

var original = data.text.normalize('NFD').replace(/[\u0300-\u036f]/g, "").toUpperCase(); 
var term = params.term.normalize('NFD').replace(/[\u0300-\u036f]/g, "").toUpperCase();