私は自分のページで選択して、ユーザーの選択に基づいて、入力フィールドの量を彼に示し、PHPスクリプトで何かをしたい。ユーザーの選択に基づいて入力フィールドを表示する(選択)
それは次のようになります。
https://i.imgur.com/RlYySko.png
、ユーザーが3を選択した場合、その後3つの入力フィールドには、ページをリロードせずに2その後、2の場合などに表示されます。何をここに使うべきなの?
私は自分のページで選択して、ユーザーの選択に基づいて、入力フィールドの量を彼に示し、PHPスクリプトで何かをしたい。ユーザーの選択に基づいて入力フィールドを表示する(選択)
それは次のようになります。
https://i.imgur.com/RlYySko.png
、ユーザーが3を選択した場合、その後3つの入力フィールドには、ページをリロードせずに2その後、2の場合などに表示されます。何をここに使うべきなの?
あなたがしたいことは、6つの入力フィールドすべてを作成することです。その後、それらをすべて標準として非表示にし、スタイルを取得するにはdocument.getElementById(id).style
を実行します。次に、選択が変更されたときに関数を呼び出し、選択した値を使用して隠れた入力を調べます。
@Arthur Cantarelaが述べたように、これはJSの悪い習慣です。 また、divに配置し、divのinnerHTMLを必要な数だけ変更することもできます。
未使用の要素を作成して非表示にすることは、DOM操作の悪い習慣です。 –
私は知らなかった。私はほとんどJSとHTMLで物事を開発する! –
anglejsでng-repeatを使用し、number選択を繰り返し式にバインドすることができます。
この単純なタスクを実行するためにちょうど角度を使うことは、爆弾を使ってハエを殺すようなものです。単純な純粋なソリューションがあります。 –
かもしれませんが、ライブラリの使用には何も問題ありません。私はあなたの解決策が特に簡単だとは思わない。 – pinski121
実際には:jsライブラリを追加するには、より多くのjsデータをロードしてクライアント側で処理する必要があり、アプリケーションの処理速度が遅くなります。私の解答の '単純さ'は、jsネイティブdom操作を使用することです。 –
あなたは、xが必要な入力の選択数であるので、
for (var i=0;i<x;i++){
var inputText = document.createElement("input"); //input element, text
inputText.setAttribute('type',"text");
inputText.setAttribute('name',"mark" + i);
f.append(inputText);
}
ユーザーが入力の数を変更できるselect要素の存在を考慮していません。 –
のようなものがここであなたができる、スニペットのX回のループによって動的に入力要素を作成することができ、あなたはすでに既存のフォームFを持っていると仮定すると、実行して確認してください。また、入力数が減少した場合に入力値を保持します。
var inputNumber = document.getElementById('input-number');
inputNumber.addEventListener('change', changeNumberOfInputs);
function changeNumberOfInputs(event) {
var desiredInputs = parseInt(event.target.value);
var inputsForm = document.getElementById('inputs-form');
var actualInputs = inputsForm.getElementsByTagName('input').length;
if(actualInputs < desiredInputs) {
for(var i=0; i<(desiredInputs - actualInputs); i++) {
inputsForm.appendChild(document.createElement('input'));
}
}
else if(actualInputs > desiredInputs) {
for(var i=0; i<(actualInputs - desiredInputs); i++) {
var lastInput = inputsForm.getElementsByTagName('input');
lastInput = lastInput[lastInput.length - 1];
inputsForm.removeChild(lastInput);
}
}
}
<select id="input-number">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
<form id="inputs-form">
<input />
</form>
入力フィールドオンロードが1つあり、0ではないことを追加する必要があります。 –
ありがとうございます。ただ固定 –
あなたがこれまでに試した任意のコードをお持ちですか? –