javascript - 芯片标签无法使用 Javascript 功能删除

标签 javascript html tags

我正在尝试创建一个以单词作为标签的输入,然后允许用户删除它们。每次单击 X 时,我都会收到错误消息

ReferenceError: remove is not defined

我不确定我做错了什么。我正在使用以下代码:

HTML:

<div class="ingredients">
  <ul id="list"></ul>
  <input type="text" id="ingredients" placeholder="type and Enter ...">
</div>

Javascript

var txt = document.getElementById('ingredients');
var list = document.getElementById('list');
var items = ['PHP', 'React.js', 'WordPress'];

txt.addEventListener('keypress', function(e) {
  if (e.key === 'Enter') {
    let val = txt.value;
    if (val !== '') {
      if (items.indexOf(val) >= 0) {
        alert('Tag name is a duplicate');
      } else {
        items.push(val);
        render();
        txt.value = '';
        txt.focus();
      }
    } else {
      alert('Please type a tag Name');
    }
  }
});

function render() {
  list.innerHTML = '';
  items.map((item, index) => {
    list.innerHTML += `<li><span>${item}</span><a href="javascript: remove(${index})">X</a></li>`;
  });
}

function remove(i) {
  items = items.filter(item => items.indexOf(item) != i);
  render();
}

window.onload = function() {
  render();
  txt.focus();
}

最佳答案

看起来像是订购问题。为了安全起见,您可以使用一个对象来存储全局函数。使用 onclick 代替 href。

    function remove(i) {
      items = items.filter(item => items.indexOf(item) != i);
      render();
    }
    function render() {
  list.innerHTML = '';
  items.map((item, index) => {
    list.innerHTML += `<li><span>${item}</span><a href="javascript: LIB.remove(${index})">X</a></li>`;
  });
}

//所有函数

window.LIB = {
  remove:remove,
  render: render
}

var txt = document.getElementById('ingredients');
var list = document.getElementById('list');
var items = ['PHP', 'React.js', 'WordPress'];

txt.addEventListener('keypress', function(e) {
  if (e.key === 'Enter') {
    let val = txt.value;
    if (val !== '') {
      if (items.indexOf(val) >= 0) {
        alert('Tag name is a duplicate');
      } else {
        items.push(val);
        render();
        txt.value = '';
        txt.focus();
      }
    } else {
      alert('Please type a tag Name');
    }
  }
});
function remove(i) {
  items = items.filter(item => items.indexOf(item) != i);
  render();
}
function render() {
  list.innerHTML = '';
  items.map((item, index) => {
    list.innerHTML += `<li><span>${item}</span><a href="javascript: void 0" onclick="LIB.remove(${index})">X</a></li>`;
  });
}
window.LIB = {
  remove:remove,
  render: render
}


window.onload = function() {
  render();
  txt.focus();
}
<div class="ingredients">
  <ul id="list"></ul>
  <input type="text" id="ingredients" placeholder="type and Enter ...">
</div>

关于javascript - 芯片标签无法使用 Javascript 功能删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60786003/

相关文章:

javascript - Body overflow-y hidden, onclick

javascript - 查询字符串与 react-router 路由不匹配的 URL

xml - 使用XPath忽略/跳过已知或所有从属标签

php - 如何删除所有 HTML 标签排除一些标签

javascript - Plone 中的 Galleria 动态 Javascript/jQuery 问题

javascript - 如何添加带有线条的jqplot饼图标签?

jquery - 使用 <ul><li> 而不是 <select> 进行导航/过滤

php - 用 PHP 替换图像标签周围的链接

html - 这两对标签的行为有何不同(参见)?

html - 当我可以使用自己的标签时,为什么要使用 "class="?