首页 > 解决方案 > 通过 javascript 提交表单

问题描述

我需要通过按回车键在输入字段中提交文本,然后将表单文本放入列表项中。问题是,当我按 Enter 时,它只是刷新页面,什么也没有发生,而且我不能使用任何后端,这纯粹是前端......顺便说一下,这是一个待办事项列表,这是到目前为止我所做的:

<html>
    <head>
        <title>Site</title>
        <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="HandheldFriendly" content="true">
        <meta charset="UTF-8">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
        <link rel="stylesheet" type="text/css" href="style.css">
        <link href="https://fonts.googleapis.com/css?family=Montserrat" rel="stylesheet">
        <link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
        <link rel="stylesheet" href="style.css">
    </head>
    <body>
        <div class="container">
            <div class="text">
                 <h1>To-Do</h1><br>
            </div>
            <form>
                <input type="text" id='uzd' placeholder="Ką reikia atlikti?">
                <button type="submit" form="uzd" value="Submit" hidden onsubmit="button()"></button>
            </form>
            <ul id='uzduotys'>

            </ul>
            <script src="script.js"></script>
        </div>
    </body>
</html>





function button(){
    var node = document.createElement("Li");
    node.setAttribute("class","li-item");
    var text = document.getElementById("uzd").value;
    if(text===""){
        alert("placeholder");
    }
    else{
        var textnode =document.createTextNode(text);
        node.appendChild(textnode);
        document.getElementById("uzduotys").appendChild(node);
    }




}

var list = document.querySelector('ul');
list.addEventListener('click', function(ev) {
    if (ev.target.tagName === 'LI') {
        ev.target.classList.toggle('checked');
    }
}, false);

标签: javascripthtml

解决方案


You were almost right: you need to move the onsubmit field to the form element, and add "return false;" to the value of onsubmit, to prevent the form to be really submitted. Then you can also remove the button element which becomes useless. See working code below:

<html>

<head>
  <title>Site</title>
  <meta charset="UTF-8">
</head>

<body>
  <div class="container">
    <div class="text">
      <h1>To-Do</h1><br>
    </div>
    <form onsubmit="button(); return false;">
      <input type="text" id='uzd' placeholder="Ką reikia atlikti?">
    </form>
    <ul id='uzduotys'>

    </ul>
  </div>
</body>

<script language="javascript">
  function button() {
    var node = document.createElement("Li");
    node.setAttribute("class", "li-item");
    var text = document.getElementById("uzd").value;
    if (text === "") {
      alert("placeholder");
    } else {
      var textnode = document.createTextNode(text);
      node.appendChild(textnode);
      document.getElementById("uzduotys").appendChild(node);
    }
  }

  var list = document.querySelector('ul');
  list.addEventListener('click', function(ev) {
    if (ev.target.tagName === 'LI') {
      ev.target.classList.toggle('checked');
    }
  }, false);
</script>

</html>


推荐阅读