无法找出为啥该值未定义

Posted

技术标签:

【中文标题】无法找出为啥该值未定义【英文标题】:unable to find out why the value is undefined无法找出为什么该值未定义 【发布时间】:2021-08-19 13:18:02 【问题描述】:

所以我有一个功能,该功能旨在在单击元素标签时将其删除,并从单独的列表中删除其各自的内容/成分。一切正常,部分,在浏览器上,当我检查控制台有一个 TypeError 并且我似乎无法找出原因。我在过去 3 个小时里一直在解决它,但找不到解决方案,请有人帮忙。下面是代码。您需要在每个单词之后输入“,”来创建一个新标签,并且由于没有添加 css,您需要单击该单词将其删除(输入后直接在行中的单词)。

const   ingredientsInput = document.querySelector('#ingredients'),
        ingredientsContainer = document.querySelector('.ingredients__tag');
let     ingredientsArray = [];

ingredientsInput.addEventListener('input', () => 
    if (ingredientsInput.value.includes(',')) 
        let v = ingredientsInput.value.replace(',', '');

        if(v != '' && v != ',') 
            let s = document.createElement('span');
    
            s.setAttribute('class', 'tag__item');
            s.innerhtml = v;
            ingredientsContainer.appendChild(s);
    
            ingredientsArray.push(v);

            recipesInclude(v, true);

            ingredientsInput.value = "";    
         else if(v = ',')     
            ingredientsInput.value = "";
        

        removeItem();
        
        console.log(ingredientsArray);
    
);

function removeItem()     
    const ingredientsItem = ingredientsContainer.querySelectorAll('.tag__item');
    
    ingredientsItem.forEach(e => 
        e.addEventListener('click', () => 
            recipesInclude(e.innerHTML, false);
            removeArray(ingredientsArray, e.innerHTML, false);
            e.remove();
    
            console.log(ingredientsArray);
        );
    );


function removeArray(array, index, result) 
    for(i = 0; i < array.length; i++)     
        if(array[i] === index)      
            array.splice(i, 1); 

            if(result) 
                return array;
            
            
    


function recipesInclude(ingredient, statement) 
    ingredientLead = document.querySelector('.list');

    if(statement) 
        if(ingredientLead.innerText.length > 0) 
            ingredientLead.innerHTML += ', ' + ingredient;
         else 
            ingredientLead.innerHTML += ingredient;
        
     else 
        ingredientSplit = ingredientLead.innerText.split(", ");        

        if(ingredientSplit.length > 1) 
            ingredientLead.innerHTML = removeArray(ingredientSplit, ingredient, true).join(", ");
         else 
            ingredientLead.innerHTML = removeArray(ingredientSplit, ingredient, true);            
        
    
<input type="text" name="ingredients" id="ingredients" onkeyup="this.setAttribute('value', this.value);" placeholder="" class="form__control">
<div class="ingredients__tag"></div>
<p class="list"></p>

【问题讨论】:

【参考方案1】:

检查此代码,这可能会有所帮助 当没有条件匹配时我添加了返回数组

const ingredientsInput = document.querySelector('#ingredients'),
  ingredientsContainer = document.querySelector('.ingredients__tag');
let ingredientsArray = [];

ingredientsInput.addEventListener('input', () => 
  if (ingredientsInput.value.includes(',')) 
    let v = ingredientsInput.value.replace(',', '');

    if (v != '' && v != ',') 
      let s = document.createElement('span');

      s.setAttribute('class', 'tag__item');
      s.innerHTML = v;
      ingredientsContainer.appendChild(s);

      ingredientsArray.push(v);

      recipesInclude(v, true);

      ingredientsInput.value = "";
     else if (v = ',') 
      ingredientsInput.value = "";
    

    removeItem();

    //console.log(ingredientsArray);
  
);

function removeItem() 
  const ingredientsItem = ingredientsContainer.querySelectorAll('.tag__item');

  ingredientsItem.forEach(e => 
    e.addEventListener('click', () => 
      recipesInclude(e.innerHTML, false);
      removeArray(ingredientsArray, e.innerHTML, false);
      e.remove();

      console.log(ingredientsArray);
    );
  );


function removeArray(array, index, result) 
  for (i = 0; i < array.length; i++) 
    if (array[i] === index) 
      array.splice(i, 1);

      if (result) 
        return array;
      
    
  
  return array;


function recipesInclude(ingredient, statement) 
  ingredientLead = document.querySelector('.list');

  if (statement) 
    if (ingredientLead.innerText.length > 0) 
      ingredientLead.innerHTML += ', ' + ingredient;
     else 
      ingredientLead.innerHTML += ingredient;
    
   else 
    ingredientSplit = ingredientLead.innerText.split(", ");

    if (ingredientSplit.length > 1) 
      ingredientLead.innerHTML = removeArray(ingredientSplit, ingredient, true).join(", ");
     else 
      ingredientLead.innerHTML = removeArray(ingredientSplit, ingredient, true);
    
  
<input type="text" name="ingredients" id="ingredients" onkeyup="this.setAttribute('value', this.value);" placeholder="" class="form__control">
<div class="ingredients__tag"></div>
<p class="list"></p>

【讨论】:

以上是关于无法找出为啥该值未定义的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose 所需的验证器失败值未定义

Mongoose 所需的验证器失败值未定义

该值未正确存储在数组中

Redux state props 值未定义

Razor表单值未显示

电子邮件值未定义