javascript - javascript 生成的元素的 "Cannot set property ' insideHTML ' of undefined"

标签 javascript html

在我的 html 表单中,当用户留下空白字段时,我想在字段下方打印一条消息。起初,我尝试在 html 中使用空跨度来包含可能的错误消息,并且它有效。但现在,我想通过 javascript 生成那些空的跨度。当我尝试在空跨度中打印innerHTML时,问题出现了,控制台显示“无法设置未定义的属性'innerHTML'”,但变量statusMessageHTML是在两个循环之外定义的,所以我不明白为什么会收到此错误.

JS

var myForm = document.getElementsByTagName('form')[0];
var formFields = document.getElementsByTagName('label');

myForm.addEventListener('submit', function(){
  event.preventDefault(); 
    var statusMessageHTML;     
    // create empty spans
    for(i = 0; i < formFields.length; i++){
      statusMessageHTML = document.createElement('span');
        statusMessageHTML.className = 'status-field-message';
      formFields[i].appendChild(statusMessageHTML);     
    }
    // print a string in empty spans
    for(i = 0; i < formFields.length; i++){
      statusMessageHTML[i].innerHTML = "Error Message"
    }      
  return false;
});

HTML

<form method="POST" action="form.php">
  <label>
    <input type="text" name="name" placeholder="Your name*">      
  </label>
  <label>
    <input type="text" name="number" placeholder="Your phone number*">        
  </label>
  <label>
    <input type="text" name="email" placeholder="Your e-mail*">      
  </label>
  <label>
    <input type="radio" name="gender" value="male">Male
    <input type="radio" name="gender" value="female">Female        
  </label>
  <label>
    <textarea name="message" rows="2" placeholder="Your message"></textarea>        
  </label>
  <button type="submit" value="Submit">SUBMIT</button>
</form>

CODEPEN

PD:我想用纯 JavaScript 来解决这个问题。

最佳答案

statusMessageHTML 对象上不存在属性 [i]。这就是未定义消息的原因。如果 statusMessageHTML[i] 未定义,则无法设置不存在的内容的 innerHTML 属性。

var myForm = document.getElementsByTagName('form')[0];
var formFields = document.getElementsByTagName('label');

myForm.addEventListener('submit', function(){
  event.preventDefault(); 
    var statusMessageHTML;     
    var elementArray = [];
    // create empty spans
    for(i = 0; i < formFields.length; i++){
      statusMessageHTML = document.createElement('span');
        statusMessageHTML.className = 'status-field-message';
      formFields[i].appendChild(statusMessageHTML);     
      elementArray.push(statusMessageHTML);
    }
    // print a string in empty spans
    for(i = 0; i < elementArray.length; i++){
      elementArray[i].innerHTML = "Error Message"
    }      
  return false;
});
<form method="POST" action="form.php">
  <label>
    <input type="text" name="name" placeholder="Your name*">      
  </label>
  <label>
    <input type="text" name="number" placeholder="Your phone number*">        
  </label>
  <label>
    <input type="text" name="email" placeholder="Your e-mail*">      
  </label>
  <label>
    <input type="radio" name="gender" value="male">Male
    <input type="radio" name="gender" value="female">Female        
  </label>
  <label>
    <textarea name="message" rows="2" placeholder="Your message"></textarea>        
  </label>
  <button type="submit" value="Submit">SUBMIT</button>
</form>

关于javascript - javascript 生成的元素的 "Cannot set property ' insideHTML ' of undefined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45527578/

相关文章:

javascript - 在 JavaScript 中查找多边形的中心点

javascript - 在 Javascript 中为函数内的 CSS 文本设置样式

javascript - 按字母顺序排列数组时如何忽略单词 "the"?

javascript - 无法设置未定义或空引用的属性 'onclick'

javascript - CheckBoxFor 生成错误的 HTML

javascript - iOS - html5 - 全屏模式 - 禁用清理

javascript - 无法从 React 中的待办事项列表中删除项目

javascript - 使用溢出自动设置 div 中绝对位置的高度

javascript - python flask : Return HTML Content

javascript - 将 html 嵌入到 javascript 文件中