javascript - JS-动态创建表

标签 javascript

<!DOCTYPE html>
    <html>
    <head>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
        <link href="mycss.css" rel="stylesheet" type="text/css">

        <link rel="stylesheet" href="https://code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css">

        <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
        <script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>

        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>

    </head>
    <body>

    <div class="container">

        <div class="row">
            <div class="col-md-6 col-md-offset-3">
                <h4>REGISTER FORM</h4>
                <p><small>Please, fill in all the fields.</small></p>

                <form id="register-form">
                  <div class="form-group">
                    <label for="name">Name</label>
                    <input type="text" class="form-control" id="name" placeholder="Enter user name" required>
                  </div>

                  <div class="form-group">
                    <label for="dof">Date of Birth</label>
                    <input type="date" class="form-control" id="dof" placeholder="mm/dd/yyyy" required>
                  </div>

                  <div class="form-group">
                    <label for="email">Email</label>
                    <input type="email" class="form-control" id="email" placeholder="Enter email">
                  </div>

                  <div class="form-group">
                    <label for="tel">Phone number</label>
                    <input type="tel" class="form-control" id="tel" placeholder="Enter Phone number">
                  </div>

                  <button id="save-button" class="btn btn-primary pull-right" onclick="save();">Save</button>
                </form>

            </div>      
        </div>

        <div class="row">
            <div class="col-md-6 col-md-offset-3">
                <table class="table">
                    <thead>
                        <tr>
                            <th>Name</th>
                            <th>Date of Birth</th>
                            <th>Email</th>
                            <th>Phone number</th>
                        </tr>
                    </thead>
                    <tbody></tbody>
                </table>
            </div>      
        </div>

    </div>

    <script>
      $( function() {
        $( "#dof" ).datepicker();
      } );
    </script>

    <script type="text/javascript">
    function save() {
        var tbody = document.getElementsByTagName('tbody')[0];
        var name = document.getElementById('name').value;
        var dof = document.getElementById('dof').value;     
        var email = document.getElementById('email').value;
        var tel = document.getElementById('tel').value;

        var tr = document.createElement('tr');
        var columns = [name, dof, email, tel]

        for (var i = 0; i < columns.length; i++) {
            var td = document.createElement("td");
            var text = document.createTextNode(columns[i]);
            td.appendChild(text);
            tr.appendChild(td);
        }

        tbody.appendChild(tr);
    };      
    </script>

    </body>
    </html>

我的 save() 函数不起作用。

附注伙计们:)不要读它..这是为了支持服务;)这很烦人..我的意思是弹出窗口说它看起来主要是代码...bla bla

最佳答案

您的问题是表单提交,从而重新加载页面并重置所有内容。

您可以通过在事件对象上调用 preventDefault() 来解决此问题。为此,您必须对 save 函数更改两件事:

  1. 添加一个函数参数来捕获事件对象,我们称之为e:

    function save(e) {
    
  2. 在函数中的某个位置调用 preventDefault,但通常将其放在接近末尾的位置:

        e.preventDefault();
    }
    

这还不是全部。现在您必须确保事件对象传递给您的函数。至少有两种方法:

  1. 如果您坚持使用 onclick 属性,请将其更改为包含特殊的 event 对象:

    <button ... onclick="save(event);">
    
  2. 许多人认为根本不使用 onclick 属性是更好的做法。在这种情况下,删除该属性,并通过 JavaScript 附加事件处理程序:

    $('#save-button').click(save);
    

    在这种情况下,事件对象会自动传递。

进一步说明

既然您正在使用 jQuery,为什么不一致地使用它呢?您的代码中有许多 native DOM 调用,例如 document.getElementsByTagName,jQuery 有更好的等效项。

将所有这些放在一起,您的代码可能如下所示:

$('#save-button').click(function (e) {
    var columns = [
        $('#name').val(),
        $('#dof').val(),   
        $('#email').val(),
        $('#tel').val()
    ];
    var $tr = $('<tr>');
    for (var i = 0; i < columns.length; i++) {
        $("<td>").text(columns[i]).appendTo($tr);
    }
    $('tbody:first').append($tr);
    e.preventDefault();
}); 

关于javascript - JS-动态创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38996453/

相关文章:

javascript - React native paper TextInput in Modal,输入一个字符后光标向后闪烁

javascript - 使用 Javascript API 在运行时编辑 ARCGIS 属性

javascript - UglifyJS 2 浏览器构建下载

javascript - 如何在 JS 中创建一个方法,就像在 Java 中创建一个抽象方法一样?

javascript - jquery mobile 未在phonegap 应用程序中加载

javascript - 为什么我的 ng-click 不起作用

javascript - 使用PHP将图像保存到指定文件夹和子文件夹?

javascript - 我如何在 JS 中单独插入一个 URL 到所有数组元素

javascript - 如何在到期前知道日期

javascript - Django : datepicker in ModelForm