2017-02-08 17 views
1

ドロップダウンメニューからパーツ選択に基づいてテーブル行を生成するプログラムがあります。作成された各行には、数量のドロップダウンを含む<td>要素があります。私の問題は、新しい部品を選択して新しい行を作成すると、すべての数量ドロップダウンがデフォルト値の1にリセットされるということです。「selected = true;」で修正しようとしました。しかし、それは動作していないようです。基本的には、ユーザーが新しい行を追加したときに最後に設定された選択値のままになるように、各数量ドロップダウンの選択値を設定する必要があります。私は各新しい行のSQLテーブルからデータを生成するためにajax呼び出しを使用しています。AJAXコールの後に、選択ドロップダウンメニューでデフォルト値を設定する方法

ここでは、選択ドロップダウンから呼び出される関数です。私は、不要なコードの多くを省略しました:ここ

function update(){ 
    var selectLists = document.getElementsByName("qty_dropdown"); 
    for(var i = 0; i < selectLists.length; i++){ 
     var firstSelectList = selectLists[i].value;  
    } 
} 

は私のドロップダウンです:

<td> 
    <select name = "qty_dropdown" onChange = "update()"> 
     <option value = '1'> 1 </option> 
     <option id = '2'value = '2'> 2 </option> 
     <option value = '3'> 3</option> 
     <option value = '4'> 4 </option> 
     <option value = '5'> 5 </option> 
     <option value = '6'> 6 </option> 
     <option value = '7'> 7 </option> 
     <option value = '8'> 8 </option> 
     <option value = '9'> 9 </option> 
     <option value ='10'> 10</option> 
    </td> 
</select> 
+0

いくつかのコードを投稿し、あなたがしようとしているものを私たちに示しています。動的IDはあなたの問題を解決します。 –

+0

にいくつかのコードが追加されました。可能であれば、 – totallytypicalcow

答えて

0

あなたはupdate()内で実行されている機能(私は()を追加し、それを改称)で実行する必要があります新しい行の追加。

function add(){ 
    var selectLists = document.getElementsByName("qty_dropdown"); 
    var firstSelectList=[]; 
    for(var i = 0; i < selectLists.length; i++){ 
     firstSelectList.push(selectLists[i].value); 
    } 
    document.getElementById("inject").innerHTML+="<select name = 'qty_dropdown' onChange = 'update()'>   <option value = '1'> 1 </option>   <option id = '2'value = '2'> 2 </option>   <option value = '3'> 3</option>   <option value = '4'> 4 </option>   <option value = '5'> 5 </option>   <option value = '6'> 6 </option>   <option value = '7'> 7 </option>   <option value = '8'> 8 </option>   <option value = '9'> 9 </option>   <option value ='10'> 10</option>   </select>  "; 
    for(var i = 0; i < selectLists.length-1;i++){ 
    selectLists[i].value=firstSelectList[i]; 
    } 
} 

この関数add()は、以前のドロップダウンをリセットせずに新しい行を追加します。

デモ:私は何https://jsfiddle.net/0wur28ot/

は、新しい行を追加する前に、配列の値を保存しているし、私はそれに応じて行加算後のドロップダウンに値を割り当てられました。

+0

に感謝します。私は同じことをやりたいのですが、ユーザーがボタンをクリックして新しい行を追加するのではなく、カテゴリーが選択されてから新しい行が作成されるため、onchangeイベントが発生します。 – totallytypicalcow

+0

https://jsfiddle.net/0wur28ot/1/これはあなたの問題を解決し、選択オプションのonchange新しい行が追加され、以前の値が保存されます –

+0

あなたの問題を解決しましたか? –

0

あなたがこれを行う方法の1つです。変数には最近選択されたドロップダウン値が記録され、DOMに新しいドロップダウンを追加するとその値が初期値として使用されます。

var lastUpdatedDropdownValue = ""; 
 

 
function update(event) { 
 
    lastUpdatedDropdownValue = event.target.value; 
 
} 
 

 
function addNewDropdown() { 
 
    var dropdown = document.querySelector("[name=qty_dropdown]"); 
 
    var newDropdown = dropdown.cloneNode(true); // make sure no duplicate IDs. If your elements that are being cloned have IDs, remove them before re-inserting into the DOM 
 
    document.getElementById("dropdownContainer").append(newDropdown); 
 
    var selectedOption = newDropdown.querySelector("[value='" + lastUpdatedDropdownValue + "']"); 
 
    selectedOption.selected = true; 
 
}
<button onclick="addNewDropdown()">Add New Dropdown</button> 
 
<div id="dropdownContainer"> 
 
    <select name="qty_dropdown" onChange="update(event)"> 
 
    <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> 
 
    <option value='6'>6</option> 
 
    <option value='7'>7</option> 
 
    <option value='8'>8</option> 
 
    <option value='9'>9</option> 
 
    <option value='10'>10</option> 
 
    </select> 
 
</div>

+0

ありがとう。これは良い解決策です。しかし、私のプログラムは、部品名を含む別のドロップダウンからの選択に基づいて新しいテーブル行を生成します。各行は、dbから選択された部品のIDから引き出された部品に関する情報を表示します:価格、部品、労働時間など。したがって、新しいテーブル行を生成するonchangeイベントにaddNewDropdown関数を配線する必要があります。 – totallytypicalcow

+0

@totallytypicalcow犯罪はありませんが、SOはコードをコピーしてプログラムに貼り付けて魔法のように動作させるためのコード作成サービスではありません。あなたの問題を解決するために私が提供したコンセプトを取るためにあなたが修正する必要があるものを正確に知っているように聞こえるので、私の仕事はここで終わります。私の答えが役に立つと分かったら、upvoteに自由に感じてください。**最も役に立つ**便利な答えを見つけたら、それを受け入れられた答えとしてマークしてください。 – mhodges

+0

私は理解しています。そして、私はスタックオーバーフローコミュニティとプログラミング全般に慣れていないので、お詫び申し上げます。このコメントに関する私の質問は、関数がonclickイベントと同じようにonchangeイベントで同じように動作するかどうかをもっと尋ねるものでした。ご協力いただきありがとうございます。 – totallytypicalcow

関連する問題