2016-09-15 20 views
0

純粋な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> 
+0

は、なぜ我々は返すのですか?私がそれらの行をコメントアウトすると、クラス名を追加しています...(ラベルのために)ラジオボタンをチェックするロジックがおそらく再実行する必要があります。 –

+2

'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 ")'を使用してください。 –

+0

私は[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) –

答えて

0

ブラケットは、おそらく、このような何か、また

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"; 
     } 
    } 
} 

ない返すことになっているが、あなたが何をしようとしていたものをif (document.getElementById)わから少しオフになっているHTMLここで成就する?それは本当に評価されますが、それは意図しない目的のようです!

希望すると便利です。

+2

HTMLElementオブジェクトに' .valueOf() '関数はありません。 'el.value'は正しいです。 JS _String_オブジェクトには[valueOf()](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/valueOf)がありますが、onblurハンドラで渡された 'this'は要素です。文字列。 –

+0

ああそうだね!渡されたものが間違っている。明らかにクラスを追加している場合は、DOM要素になります。 – alexmdodge

0

おかげで、すべての - 私はあなたの応答の組み合わせを使用するが、これは働いている: `el.checked`がtruthyとき

function select_radio_item_other_button(text_obj, radio_but) 
{ 
    var el = document.getElementById(radio_but); 

    if (text_obj.value != '') { 
     el.checked = true; 
     text_obj.className += " selected"; 
    } 
} 
関連する問題