Почему элемент сращивания возвращается к отображению при следующей записи в списке? - PullRequest
0 голосов
/ 12 сентября 2018

Я просмотрел все предыдущие релевантные вопросы, но ничего не помогло, вот и я.

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

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

Здесьмой код и фрагмент кода.Пожалуйста, помогите мне узнать, что не так.

Код Pen

function deleteListItem(){
    var listToSearch = $('#displayArea').html().split(', ');
    var searchItem = prompt('item to delete').trim();
    var res = listToSearch.indexOf(searchItem);
    if(searchItem !== '' && res !== -1){
        listToSearch.splice(res, 1);
        $('#displayArea').html(listToSearch.join(', '));
    }else{
        alert('Please enter search name');
    }
}

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

Вы обновляете listToSearch (локальная переменная) и displayArea (элемент html), но не глобальную переменную listInputArr.Убедитесь, что вы удалили элемент из listInputArr в deleteListItem ().

function deleteListItem(){
  var searchItem = prompt('item to delete').trim();
  var res = listInputArr.indexOf(searchItem);
  if(searchItem !== '' && res !== -1){
    listInputArr.splice(res, 1);
    $('#displayArea').html(listInputArr.join(', '));
  }else{
    alert('Please enter search name');
  }

}
0 голосов
/ 12 сентября 2018

Я изменил часть вашего кода, и он, кажется, работает.В вашей функции inputFunc () измените listInputArr.push(userItem); на

listInputArr.push(...userItem.split(','));

. Это обеспечит, что если пользователь введет 'aa, bb', он не будет сохранен как одна строка, а разбит на разделенные строки на ','

далее вам нужно изменить deleteListItem () следующим образом:

function deleteListItem(){
  //var listToSearch = $('#displayArea').html().split(', ');
  var searchItem = prompt('item to delete').trim();
  var res = listInputArr.indexOf(searchItem);
  alert(res);
  if(searchItem !== '' && res !== -1){
    listInputArr.splice(res, 1);
  $('#displayArea').html(listInputArr.join(', '));
  }else{
    alert('Please enter search name');
  }
}

Надеюсь, это поможет.Пожалуйста, дайте мне знать, если у вас возникнут проблемы с моим кодом.

0 голосов
/ 12 сентября 2018

Это происходит потому, что вы работаете с текстом из $('#displayArea'). Но в вашем коде есть переменная listInputArr, которая хранит список элементов, но в вашей функции вы не меняете ее. Таким образом, вместо получения элементов из строки, получите элементы из listInputArr и удалите элементы там:

var searchItem = prompt('item to delete').trim();
var res = listInputArr.indexOf(searchItem);
if(searchItem !== '' && res !== -1){
  listInputArr.splice(res, 1);
  $('#displayArea').html(listInputArr.join(', '));
}else{
  alert('Please enter search name');
}
...