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

Когда я выполняю свой Javascript, я получаю эту ошибку:

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

И я не знаю, как это исправить и почему это показано.

У меня есть объекты внутри массива,

пример:

AsukohaArray = [{"Punkt":[[58.1056],[23.2589]],
                    "name":"Haapsalu Raamat",
                    "PunktiID": 23}];

Мой код

$(document).ready(function() {
  $("input[type='search']").keyup(function() {
    var searchTerm = $(this).val();
    var myExp = new RegExp(searchTerm, "i");
    var output = "<ul id='result'>";
    $.each(AsukohaArray, function(key, val) {
      //console.log(val.name);
      if ((val.name).search(myExp) != -1) {
        output += '<li>';
        output += val.name;
        output += '</li>';
      }
    });
    console.log(output);
    output += "</ul>";
    $('div#update').html(output);
  });
});

HTML

<ons-page id="my-page">
    <ons-toolbar>
        <div class="left">
            <ons-toolbar-button ng-click="menu.toggleMenu()"><ons-icon icon="ion-navicon" style="font-size: 32px; width: 1em;"></ons-icon></ons-toolbar-button>
        </div>

        <div class="center">Kaardi vaade</div>
    </ons-toolbar>
    <div id="nupuriba">
    <input type="search" class="search-input" id="#search">
    </div>
    <div id="update"></div>
    <div id="map-canvas">
    </div>
</ons-page>

Когда я вставляю "Хаапсалу", тогда получаются следующие результаты:

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

Я искал эту ошибку, но безрезультатно, не нашел ничего похожего.

3 ответа

Решение

Является ли ваш "val" (элемент из массива) примитивным типом данных, или это объект, содержащий атрибут "name"? Если ваш val, скажем, тип String, вы должны "искать" непосредственно в нем. Ваша ошибка предполагает, что "val" не содержит атрибута с именем "name".

Кроме того, поскольку вы используете RegExp, вы, вероятно, должны пойти с

if( val.match(myExp) > 0 )

или даже лучше, если вы заботитесь только о логическом результате,

if ( val.test(myExp) )

Если я ошибаюсь, и ваш атрибут.name существует, если это строка, просто используйте ее без скобок:

if( val.name.test(myExp) )

Ты можешь попробовать

   if(val.indexOf(myExp) != -1){

вместо

   if(val.search(myExp) != -1){
      if (val.name != undefined){
    if ((val.name).search(myExp) != -1) {...}
}
Другие вопросы по тегам