Select2 Matcher не работает Uncaught TypeError - PullRequest
0 голосов
/ 09 октября 2019

По какой-то причине я не могу заставить совпадения работать в приложении конвертации валют. Я продолжаю получать:

Uncaught TypeError: Невозможно прочитать свойство 'toUpperCase' из неопределенного

function matchCustom(params, data) {


  // If there are no search terms, return all of the data
  if ($.trim(params.term) === '') {
    return data;
  }

  // Do not display the item if there is no 'text' property
  if (typeof data.text === 'undefined') {
    return null;
  }

  // `params.term` should be the term that is used for searching
  // `data.text` is the text that is displayed for the data object
  if (data.text.toUpperCase().indexOf(params.term.toUpperCase()) > -1) {
    return data;
  }

  // custom search using lookup data
  if ($(data.element).data('lookup').toUpperCase().indexOf(params.term.toUpperCase()) > -1) {
    return data;
  }



  // Return `null` if the term should not be displayed
  return null;
}



$(".js-example-templating").select2({
    templateSelection: formatState,
    templateResult: formatState,
    matcher: matchCustom

});
<select class="js-example-templating"   >
            <option value="GBP"  selected>GBP</option>
            <option value="EUR" data-lookup="Spain, Italy" >EUR</option>
</select>

Есть идеи, как это исправить?

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

Причина, по которой вы получаете эту ошибку, заключается в том, что вы не определили поиск данных для первого варианта, но пытаетесь сослаться на него в своем коде.

<option value="GBP"  selected>GBP</option>

Вы пытаетесь сослаться на негоздесь

// custom search using lookup data
  if ($(data.element).data('lookup').toUpperCase().indexOf(params.term.toUpperCase()) > -1) {
    return data;
  }

Вы должны убедиться, что свойство lookup существует, чтобы избежать этой ошибки. Вам необходимо изменить условие if, как показано ниже:

if ( typeof $(data.element).data('lookup') !== 'undefined' && $(data.element).data('lookup').toUpperCase().indexOf(params.term.toUpperCase()) > -1) {

Вы можете проверить демонстрацию по адресу JSFiddle

0 голосов
/ 09 октября 2019

Первый тег option не содержит атрибута поиска данных в вашем примере, возможно, именно поэтому вы получили ошибку!

...