我对JavaScript还很陌生,所以我甚至不知道这是否可能.我有一个带有自动完成功能的搜索栏,我还有几个按钮可以改变我的网站语言:

//searchbar//
let availableKeywords = [
  'example1',
  'exapmle2',
  'example3'
];

const resultsBox = document.querySelector(".result-box");
const inputBox = document.getElementById("query");

inputBox.onkeyup = function(){
  let result = [];
  let input = inputBox.value;
  if(input.length){
    result = availableKeywords.filter((keyword)=>{
      return keyword.toLowerCase().includes(input.toLowerCase());
    });
    console.log(result);
  }
  display(result);

  if(!result.length){
    resultsBox.innerHTML = '';
  }
}

function display(result){
  const content = result.map((list)=>{
    return "<li onclick=selectInput(this)>" + list + "</li>";
  });

  resultsBox.innerHTML = "<ul>" + content.join('') + "</ul>";
}

function selectInput(list){
  inputBox.value = list.innerHTML;
  resultsBox.innerHTML = '';
}

//buttons//
const langEl = document.querySelector(".langWrap");

link.forEach((el) => {
  el.addEventListener("click", () => {
    langEl.querySelector(".active").classList.remove("active");
    el.classList.add("active");
});

我想知道availableKeyword的内容是否可能根据激活的语言按钮而改变语言?

推荐答案

是的,你能做到的.首先,将availableKeywords从数组转换为一个对象,该对象的键是语言名称,与这些名称关联的值是可搜索关键字的array.

其次,确保您管理语言更改并将当前语言存储在某个位置,为此我使用了chosenLanguage.

第三,确保searchfunction与事件分开定义,并将事件分配给此函数,以便您也可以在语言 Select 中重用它.

第四,在搜索时,引用按所选语言名称解锁的数组(确保列表中的语言名称与对象中用作键的语言名称兼容)

最后,确保您的语言 Select 事件正确地 Select 了语言并执行了搜索.

//searchbar//
let availableKeywords = {
  en: [
      'biropen',
      'piglet',
      'piggyback',
      'bullet of the gun',
      'chewing gum'
  ],
  hu: [
      'golyóstoll',
      'kismalac',
      'hobby malacoglás',
      'puskagolyó',
      'rágógumi'
  ],
};

let chosenLanguage = 'en';

const resultsBox = document.querySelector(".result-box");
const inputBox = document.getElementById("query");

function search(){
  let result = [];
  let input = inputBox.value;
  if(input.length){
    result = availableKeywords[chosenLanguage].filter((keyword)=>{
      return keyword.toLowerCase().includes(input.toLowerCase());
    });
    console.log(result);
  }
  display(result);

  if(!result.length){
    resultsBox.innerHTML = '';
  }
}

inputBox.onkeyup = search;

function display(result){
  const content = result.map((list)=>{
    return "<li onclick=selectInput(this)>" + list + "</li>";
  });

  resultsBox.innerHTML = "<ul>" + content.join('') + "</ul>";
}

function selectInput(list){
  inputBox.value = list.innerHTML;
  resultsBox.innerHTML = '';
}

//buttons//
const langEl = [...document.querySelectorAll(".langWrap")];

langEl.forEach((el) => {
  el.addEventListener("click", () => {
    langEl.map(item => item.classList.contains("active") ? item.classList.remove("active") : false);
    el.classList.add("active");
    chosenLanguage = el.innerText;
    search();
  });
});
.langWrap.active {
    background-color: green;
}

.langWrap {
    cursor: pointer;
    padding: 5px;
}

ul#lang {
    display: contents;
}

ul#lang li {
    margin-bottom: 5px;
}
<ul id="lang">
    <li><span class="langWrap active">en</span></li>
    <li><span class="langWrap">hu</span></li>
</ul>
<input type="text" id="query" placeholder="type your search here">
<div class="result-box"></div>

Javascript相关问答推荐

vscode扩展-webView Panel按钮不起任何作用

提交表格后保留Web表格中的收件箱值?

yarn安装一个本地npm包,以便本地包使用main项目的node_modules(ckeditor-duplicated-modules错误)

嵌套异步JavaScript(微任务和macrotask队列)

在Vite React库中添加子模块路径

如何将Map字符串,布尔值转换为{key:string;value:bo布尔值;}[]?<>

如何从调整大小/zoom 的SVG路径定义新的d属性?""

在拖放时阻止文件打开

如何从Intl.DateTimeFormat中仅获取时区名称?

变量的值在Reaction组件中的Try-Catch语句之外丢失

查询参数未在我的Next.js应用路由接口中定义

面对代码中的错误作为前端与后端的集成

将对象推送到数组会导致复制

如何为仅有数据可用的点显示X轴标签?

将范围 Select 器添加到HighChart面积图

按特定顺序将4个数组组合在一起,按ID分组

在Puppeteer中使用promise进行日志(log)记录时出现TargetCloseError

REACT-本机错误:错误类型错误:无法读取未定义的容器的属性

相对于具有选定类的不同SVG组放置自定义工具提示

调试jQuery代码以获取所有行的总和(票证类型)