2017-05-18 2 views
0

私は、フォーカスの選択ボックスをオートポピュレートするためにjavascriptを使用しています。そして、ボールドのinnerHTML(選択された値を除く)をクリアします(リストのサイズが大きくなるのを防ぐ)。変数= getDocumentById( "something")。値がデータの半分を失っていますか?

選択された値が2つの単語でない限り、すべてが期待どおりに機能します。たとえば、「Bath Bombs」。選択ボックスをもう一度クリックし、同じオプションを選択すると(リストの一番上に表示されます)、フィールドから「爆弾」という単語がドロップされます???

(また、私はそれを持っているようなコードで、縮小からフィールドを維持する方法はありますか?)

私が間違った場所誰かが私に教えていただけますか? (ところで:私は非常に少ないjavascriptやHTMLを知っている - 私は最後の数日間で自分自身にこれを教えています)

<script> 
 
    
 
function prodType(id){ 
 
\t var targetId = id; 
 
\t var select = document.getElementById(targetId); 
 
\t var options = [ \t "", "Candles", "Tarts", "Bath Salts", "Bath Bombs", "Glycerin Soaps", "Salt Scrubs", "Sugar Scrubs", "Shower Gel", "Lotions"]; 
 
\t \t for(var i = 0; i < options.length; i++) { 
 
\t \t var opt = options[i]; 
 
\t \t var el = document.createElement("option"); 
 
\t \t \t el.textContent = opt; 
 
\t \t \t el.value = opt; 
 
\t \t \t select.appendChild(el); 
 
\t \t } 
 
\t } 
 

 
function clearAll(id) { 
 
\t var targetId = id; 
 
\t var select = document.getElementById(targetId); 
 
\t var svalue = select.value; 
 
\t select.innerHTML = "<option value="+svalue+">"+svalue+"</option>"; \t \t 
 
\t } 
 

 
</script> 
 

 
<select style="width:150" id="selectNumber" onfocus="prodType(this.id)" onblur="clearAll(this.id)"> 
 
\t <option value="" hidden>Product Type</option> 
 
</select>

あなたはこのコードを実行した場合...「2を選択「単語」オプションを選択し、選択ボックスをクリックしてから、今度は同じオプションを再度選択します。今回はリストの~~ THE TOP〜〜から選択します。

クリックすると、何が起きているかがわかります。

ありがとうございます!

+0

引用符が....問題では:) – epascarello

+0

私は何をdo.whatしようとしていることを選択し、選択した通常のHTMLを使用してオーバー達成構築し、クリアしない理解しませんか? – Steve

+0

ソーサリー... lunochkin、それはすぐに両方の問題を解決! – zthaynes

答えて

2

問題は、オプション値を更新しているとき、それは本質的value=bath bombsとして設定されていますので、あなたが引用符を含めていないことです。 bombsは無視され、ちょうどvalue=bathになります。引用符(value='bath bombs')を追加すると、期待どおりに動作します。

function prodType(id){ 
 
\t var targetId = id; 
 
\t var select = document.getElementById(targetId); 
 
\t var options = [ \t "", "Candles", "Tarts", "Bath Salts", "Bath Bombs", "Glycerin Soaps", "Salt Scrubs", "Sugar Scrubs", "Shower Gel", "Lotions"]; 
 
\t \t for(var i = 0; i < options.length; i++) { 
 
\t \t var opt = options[i]; 
 
\t \t var el = document.createElement("option"); 
 
\t \t \t el.textContent = opt; 
 
\t \t \t el.value = opt; 
 
\t \t \t select.appendChild(el); 
 
\t \t } 
 
\t } 
 

 
function clearAll(id) { 
 
\t var targetId = id; 
 
\t var select = document.getElementById(targetId); 
 
\t var svalue = select.value; 
 
\t select.innerHTML = "<option value='"+svalue+"'>"+svalue+"</option>"; \t \t 
 
\t }
<select style="width:150" id="selectNumber" onfocus="prodType(this.id)" onblur="clearAll(this.id)"> 
 
\t <option value="" hidden>Product Type</option> 
 
</select>

+0

それは動作しますが、私は構文をあまり理解していません。 (私はnoob afterallです)私はそこに引用符を入れて、期待出力を変更するだろうと思った:これは、変数の前後に引用符を付けると簡単なテキストに変換されるので機能しません。だから、私はここに来た - 大変感謝している! – zthaynes

+0

爆弾は無視されず、値のない別の属性と見なされます。 – epascarello

+0

右ですが、ブラウザは何もしません。 –

0

あなたは、単一引用符で、このようなバリアントを使用することができます。

select.innerHTML = "<option value='"+svalue+"'>"+svalue+"</option>"; 
関連する問題