jquery 为什么Select2框架找不到某些Unicode字符?

kwvwclae  于 2023-08-04  发布在  jQuery
关注(0)|答案(3)|浏览(99)

我在mu网站中使用select2.js。我的网站语言是波斯语。我用这个选项填充select元素

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

字符串
js:

(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();


当我在select2的搜索框中键入
ك
字符它显示消息,* 没有结果发现 *,但这是错误的。
我把阿拉伯语加到我的键盘上,然后重新测试。本例中select2当前找到的单词。现在我怎么能解决这个问题?

**jsbin link**第一个字符

bgibtngc

bgibtngc1#

我也遇到过类似的问题。我创建了一个自定义匹配器。

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();

fnatzsnv

fnatzsnv2#

波斯语和阿拉伯语中存在写相同的数字字符,但这些字符代码不相同!例如:
ك是阿拉伯字符
ک是波斯字符
我把这个字符改为波斯文并解决。

daupos2t

daupos2t3#

正如hmahdavi所说,最好的处理方法是,在填充select2对象时更改字符。在www.example.com mvc中填充Model时,我自己将控制器中的'ي'替换为'asp.netorder'。
从datatable填充项目列表时:

var prjList = (from x in dtPrjList.AsEnumerable()

select new ProjectViewModels
{
  Id = x.Field<Int64>("HdrId"),
  Name = x.Field<String>("PrjName").Replace('ي','ی'),
  Code = x.Field<String>("AccNo"),
}).ToList();

字符串
如果你使用的是模型,在服务器端修改字符。

相关问题