Cách tạo <input type = “text” /> động


77

Tôi muốn tạo động văn bản kiểu nhập trong biểu mẫu web của mình. Cụ thể hơn, tôi có một trường văn bản nơi người dùng nhập số lượng trường văn bản mong muốn; Tôi muốn các trường văn bản được tạo động ở cùng một dạng.

Làm thế nào để làm điều đó?

Câu trả lời:


154

Với JavaScript:

var input = document.createElement("input");
input.type = "text";
input.className = "css-class-name"; // set the CSS class
container.appendChild(input); // put it into the DOM

Tôi xin lỗi, nhưng tôi không thể hiển thị nó trên biểu mẫu của mình? tôi đã tạo một chức năng được kích hoạt khi nút thêm được nhấp vào. Nhưng tôi không thể tìm ra cách lấy vlaue từ trường văn bản đó mà người dùng nhập theo số lượng trường văn bản cần tạo. . ? Và điều gì sẽ xảy ra nếu tôi cũng muốn gán một lớp css cho các trường văn bản được tạo động này. . ?
Mohammad Usman

Tôi đã thêm một số mã vào ví dụ để hiển thị việc nối nó vào DOM và thêm một lớp CSS vào phần tử được tạo động.
Zach

26

Sử dụng Javascript, tất cả những gì bạn cần là document.createElementsetAttribute.

var input = document.createElement("input");
input.setAttribute('type', 'text');

Sau đó, bạn có thể sử dụng appendChildđể nối phần tử đã tạo vào phần tử mẹ mong muốn.

var parent = document.getElementById("parentDiv");
parent.appendChild(input);

3

Có thể phương pháp document.createElement();là những gì bạn đang tìm kiếm.


3

Để tạo số lượng trường đầu vào do người dùng cung cấp


  1. Lấy số lượng trường văn bản từ người dùng và gán nó cho một biến.

    var no = document.getElementById("idname").value


  1. Để tạo các trường đầu vào, sử dụng createElementphương thức và chỉ định tên phần tử tức là "đầu vào" làm tham số như bên dưới và gán nó cho một biến.

    var textfield = document.createElement("input");


  1. Sau đó gán các thuộc tính cần thiết cho biến.

    textfield.type = "text";

    textfield.value = "";


  1. Cuối cùng, hãy thêm biến vào phần tử biểu mẫu bằng appendChildphương thức. để phần tử đầu vào sẽ được tạo trong chính phần tử biểu mẫu.

    document.getElementById('form').appendChild(textfield);


  1. Lặp lại bước 2,3 và 4 để tạo số phần tử đầu vào mong muốn do người dùng cung cấp bên trong phần tử biểu mẫu.

    for(var i=0;i<no;i++) {           
        var textfield = document.createElement("input");
        textfield.type = "text"; textfield.value = "";
        document.getElementById('form').appendChild(textfield);
    }
    

Đây là mã hoàn chỉnh

function fun() {
    /*Getting the number of text fields*/
    var no = document.getElementById("idname").value;
    /*Generating text fields dynamically in the same form itself*/
    for(var i=0;i<no;i++) {
        var textfield = document.createElement("input");
        textfield.type = "text";
        textfield.value = "";
        document.getElementById('form').appendChild(textfield);
    }
}
<form id="form">
    <input type="type" id="idname" oninput="fun()" value="">
</form>


2

Bạn có thể làm điều gì đó như thế này trong một vòng lặp dựa trên số lượng trường văn bản mà họ nhập.

$('<input/>').attr({type:'text',name:'text'+i}).appendTo('#myform');

Nhưng để có hiệu suất tốt hơn, trước tiên tôi sẽ tạo tất cả html và đưa nó vào DOM chỉ một lần.

var count = 20;
var html = [];
while(count--) {
  html.push("<input type='text' name='name", count, "'>");
}
$('#myform').append(html.join(''));

Chỉnh sửa ví dụ này sử dụng jQuery để nối thêm html, nhưng bạn cũng có thể dễ dàng sửa đổi nó để sử dụng innerHTML.


7
Có thể tốt khi đề cập rằng điều này phụ thuộc vào jQuery, vì câu hỏi không chỉ định jQuery.
Jeff

2

Bạn có thể sử dụng createElement()phương pháp để tạo hộp văn bản đó


2

Tôi nghĩ rằng liên kết sau đây sẽ giúp bạn. Nếu bạn muốn tạo động các trường và cũng muốn xóa chúng cùng lúc, bạn có thể nhận trợ giúp từ đây. Tôi đã có cùng một câu hỏi, vì vậy tôi đã có câu trả lời

$(function() {
        var scntDiv = $('#p_scents');
        var i = $('#p_scents p').size() + 1;

        $('#addScnt').live('click', function() {
                $('<p><label for="p_scnts"><input type="text" id="p_scnt" size="20" name="p_scnt_' + i +'" value="" placeholder="Input Value" /></label> <a href="#" id="remScnt">Remove</a></p>').appendTo(scntDiv);
                i++;
                return false;
        });

        $('#remScnt').live('click', function() { 
                if( i > 2  ) {
                        $(this).parents('p').remove();
                        i--;
                }
                return false;
        });
});

http://jsfiddle.net/jaredwilli/tZPg4/4/


Phần loại bỏ của mã này khá không hoàn hảo. Nếu bạn thêm 2 đầu vào và xóa cái ở giữa, bạn sẽ có 2 đầu vào có cùng ID. Tốt hơn nên loại bỏ dòng với i--;Ngoài ra, bạn sẽ phải xử lý riêng biệt trường đầu vào gốc và trường nhập bổ sung nếu bạn đặt nó vào một biểu mẫu được xử lý bởi PHP.
jaaq


1

bạn có thể sử dụng ES6 back thoát

  var inputs = [
        `<input type='checkbox' id='chbox0' onclick='checkboxChecked(this);'> <input  type='text' class='noteinputs0'id='note` + 0 + `' placeholder='task0'><button  id='notebtn0'                     >creat</button>`, `<input type='text' class='noteinputs' id='note` + 1 + `' placeholder='task1'><button  class='notebuttons' id='notebtn1' >creat</button>`, `<input type='text' class='noteinputs' id='note` + 2 + `' placeholder='task2'><button  class='notebuttons' id='notebtn2' >creat</button>`, `<input type='text' class='noteinputs' id='note` + 3 + `' placeholder='task3'><button  class='notebuttons' id='notebtn3' >creat</button>`, `<input type='text' class='noteinputs' id='note` + 4 + `' placeholder='task4'><button  class='notebuttons' id='notebtn4' >creat</button>`, `<input type='text' class='noteinputs' id='note` + 5 + `' placeholder='task5'><button  class='notebuttons' id='notebtn5' >creat</button>`, `<input type='text' class='noteinputs' id='note` + 6 + `' placeholder='task6'><button  class='notebuttons' id='notebtn6' >creat</button>`, `<input type='text' class='noteinputs' id='note` + 7 + `' placeholder='task7'><button  class='notebuttons' id='notebtn7' >creat</button>`, `<input type='text' class='noteinputs' id='note` + 8 + `' placeholder='task8'><button  class='notebuttons' id='notebtn8' >creat</button>`, `<input type='text' class='noteinputs' id='note` + 9 + `' placeholder='task9'><button  class='notebuttons' id='notebtn9' >creat</button>`
    ].sort().join(" ");
   document.querySelector('#hi').innerHTML += `<br>` +inputs;
<div id="hi"></div>


1

Ý tưởng cốt lõi của giải pháp là:

  • tạo một inputyếu tố mới
  • Thêm loại text
  • nối phần tử vào DOM

Điều này có thể được thực hiện thông qua tập lệnh đơn giản này:

var input = document.createElement('input');
input.setAttribute('type', 'text');
document.getElementById('parent').appendChild(input);

Bây giờ câu hỏi là, làm thế nào để làm cho quá trình này động. Như đã nêu trong câu hỏi, có một đầu vào khác mà người dùng chèn số lượng đầu vào để tạo. Điều này có thể được thực hiện như sau:

function renderInputs(el){
  var n = el.value && parseInt(el.value, 10);
  if(isNaN(n)){
    return;
  }
  
  var input;
  var parent = document.getElementById("parent");
  
  cleanDiv(parent);
  for(var i=0; i<n; i++){
    input = document.createElement('input');
    input.setAttribute('type', 'text');
    parent.appendChild(input);
  }
}

function cleanDiv(div){
  div.innerHTML = '';
}
Insert number of input to generate: </br>
<input type="text" onchange="renderInputs(this)"/>

<div id="parent">
Generated inputs:
</div>

nhưng thường chỉ thêm một đầu vào là không thực sự hữu ích, tốt hơn là thêm tên cho đầu vào, để nó có thể dễ dàng được gửi dưới dạng biểu mẫu. Đoạn mã này cũng thêm một tên:

function renderInputs(el){
  var n = el.value;
  var input, label;
  var parent = document.getElementById("parent");
  cleanDiv(parent);
  
  el.value.split(',').forEach(function(name){
    input = document.createElement('input');
    input.setAttribute('type', 'text');
    input.setAttribute('name', name);
    label = document.createElement('label');
    label.setAttribute('for', name);
    label.innerText = name;
    parent.appendChild(label);
    parent.appendChild(input);
    parent.appendChild(document.createElement('br'));
  });
}

function cleanDiv(div){
  div.innerHTML = '';
}
Insert the names, separated by comma, of the inputs to generate: </br>
<input type="text" onchange="renderInputs(this)"/>
<br>
Generated inputs: </br>
<div id="parent">

</div>


0
  • Truy vấn và lấy phần tử DOM vùng chứa

  • Tạo phần tử mới

  • Đặt phần tử mới vào tài liệu Cây

//Query some Dib region you Created
let container=document.querySelector("#CalculationInfo .row .t-Form-itemWrapper");
let input = document.createElement("input");

//create new Element  for apex
input.setAttribute("type","text");
input.setAttribute("size","30");
containter.appendChild(input); // put it into the DOM

@murb bạn cũng có thể đóng góp
Bhargav Nanekalva

0
<button id="add" onclick="add()">Add Element</button>

<div id="hostI"></div>

<template id="templateInput">
    <input type="text">
</template>

<script>
    function add() {

        // Using Template, element is created
        var templateInput = document.querySelector('#templateInput');
        var clone = document.importNode(templateInput.content, true);

        // The Element is added to document
        var hostI = document.querySelector('#hostI');
        hostI.appendChild(clone);
    }

</script>

Mẫu HTML hiện là tiêu chuẩn được khuyến nghị để tạo nội dung động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.