純粋なJSを使用して、入力が値を持つときにクラスを数値入力に追加しようとしています。 JSの最初の部分( "checked"状態を追加する)は機能していますが、クラス名( "selected")を追加する部分は適用されません。私が間違っていることは何ですか?入力に値が入力されたときに数値入力にクラス名を追加
これは、ラジオと数字の組み合わせの入力です。したがって、余分な入力タイプです。
function select_radio_item_other_button(text_obj, radio_but)
{
if (document.getElementById)
{
el = document.getElementById(radio_but);
if (el.checked)
return;
if (text_obj.value != '')
el.checked = true;
text_obj.className += " selected";
}
}
そして
<div class="other">
<input type="radio" name="radio_21" id="radio_21_22" checked="checked">
<label for="radio_21_22" id="radio_21_22_amt">
<input type="number" style="padding-left:0;" name="radio_21_22_amt" id="radio_21_22_amt" value="" min="0" max="50000000" step="1" onblur="javascript:select_radio_item_other_button(this, 'radio_21_22')">
</label>
</div>
は、なぜ我々は返すのですか?私がそれらの行をコメントアウトすると、クラス名を追加しています...(ラベルのために)ラジオボタンをチェックするロジックがおそらく再実行する必要があります。 –
'id'はページ内で一意でなければなりません。ラベルと入力の両方で 'id =" radio_21_22_amt "を使用しているので、' document.getElementById() 'はおそらく_input_ではなく_label_(idの最初の出現)を返します。他のもの: 'el = document.get ...'は_global_変数を作成します。 _var_ 'var el = document.get ...'を使用してください。あなたが_ancient_ブラウザをサポートしている場合を除き、最近は 'if(document.getElementById)'テストは必要ありません。現代のブラウザでも、 '+ ='ではなく 'el.classList.add(" selected ")'を使用してください。 –
私は[this codepen](http://codepen.io/anon/pen/ozxKRp)を作成しましたが、それはうまく動作するようです。あなたの投稿コードからの変更は、1)ID名が一意であることを確認しました。2)2番目のラジオボタンを押してテストしました。3)ラジオボタンを事前チェックしません。4 )は 'el'に' var'を追加しました - でも、私はこれとは違って、あなたのターゲットブラウザの聴衆に応じて部分的にこれを行います。インライン 'style ='とインライン 'onevent ='は一般に悪い習慣です。 learn ['addEventListener'](http://developer.mozilla.org/docs/Web/API/EventTarget/addEventListener) –