動的にフィールドセットを追加することに関する多くのブログや記事を読んだことがありますが、それらはすべて非常に複雑な答えを与えます。私が必要としているのはそれほど複雑ではありません。
私のHTMLコード:
<input type="text" name="member" value="">Number of members: (max. 10)<br />
<a href="#" id="filldetails">Fill Details</a>
そのため、ユーザーはinput
フィールドに整数値(javascriptを使用して検証を確認しています)を入力します。そしてFill Details
リンクをクリックすると、彼が入力するのに対応する数の入力フィールドが現れるでしょう。私はJavaScriptを使用してこれを達成したいです。
私はJavaScriptの専門家ではありません。リンクを介してinput
フィールドにユーザーが入力した整数を取得し、対応する数の入力フィールドを表示する方法を考えていました。
テキストフィールドの入力値を取得するためにonclick
イベントハンドラを使用できます。 document.getElementById()
で安全に参照できるように、必ずフィールドに一意のid
属性を指定してください。
動的に要素を追加したい場合は、それらを配置するコンテナを用意する必要があります。例えば<div id="container">
です。 document.createElement()
を使用して新しい要素を作成し、appendChild()
を使用してそれらをそれぞれコンテナーに追加します。意味のあるname
属性を出力することに興味があるかもしれません(例えば、動的に生成されたname="member"+i
sのそれぞれに対して<input>
がフォームで送信されるのであれば)。
document.createElement('br')
を使って<br/>
要素を作成することもできます。単にテキストを出力したいだけなら、代わりにdocument.createTextNode()
を使うことができます。
また、コンテナが移入されるたびにコンテナをクリアしたい場合は、hasChildNodes()
とremoveChild()
を一緒に使用できます。
<html>
<head>
<script type='text/javascript'>
function addFields(){
// Number of inputs to create
var number = document.getElementById("member").value;
// Container <div> where dynamic content will be placed
var container = document.getElementById("container");
// Clear previous contents of the container
while (container.hasChildNodes()) {
container.removeChild(container.lastChild);
}
for (i=0;i<number;i++){
// Append a node with a random text
container.appendChild(document.createTextNode("Member " + (i+1)));
// Create an <input> element, set its type and name attributes
var input = document.createElement("input");
input.type = "text";
input.name = "member" + i;
container.appendChild(input);
// Append a line break
container.appendChild(document.createElement("br"));
}
}
</script>
</head>
<body>
<input type="text" id="member" name="member" value="">Number of members: (max. 10)<br />
<a href="#" id="filldetails" onclick="addFields()">Fill Details</a>
<div id="container"/>
</body>
</html>
これに関する実用的なサンプルを参照してください JSFiddle 。
フォーム、フィールド、および削除/削除の動作を動的に含めるには、このJQueryコードを試してください。
$(document).ready(function() {
var max_fields = 10;
var wrapper = $(".container1");
var add_button = $(".add_form_field");
var x = 1;
$(add_button).click(function(e) {
e.preventDefault();
if (x < max_fields) {
x++;
$(wrapper).append('<div><input type="text" name="mytext[]"/><a href="#" class="delete">Delete</a></div>'); //add input box
} else {
alert('You Reached the limits')
}
});
$(wrapper).on("click", ".delete", function(e) {
e.preventDefault();
$(this).parent('div').remove();
x--;
})
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container1">
<button class="add_form_field">Add New Field
<span style="font-size:16px; font-weight:bold;">+ </span>
</button>
<div><input type="text" name="mytext[]"></div>
</div>
参照してください デモはこちら