2016-08-09 4 views
0

Js/Railsコードに問題があります。私はボタンをクリックすると(同じページにこのフォームを複数作成することができます)、動的に作成されたフォームを持っています。これは決して同じIDではない選択を含んでいます。選択値に応じて入力に値を入れる必要があります。最初の形式では完全に動作しますが、後で他の形式では動作しません。私が言ったように、それらはレールに作られているので、私はIDにアクセスできません。selectの値をdinamically作成時に入力にバインドする方法

HTML

<div class="test"> 
<div> 
    <div class="divSelect"> 
    <select id="1470190840697_ad_type"> 
    <option>Element1</option> 
    <option>Element2</option> 
    <option>Element3</option> 
    <option>Element4</option> 
    <option>Element5</option> 
    <option>Element6</option> 
    </select> 
</div> 
    <div class="divInput"> 
    <input type="text"> 
    </div> 
</div> 
<div> 

    //This is dynamically created 
    <div class="divSelect"> 
    <select id="1470190846932_ad_type"> 
     <option>Element1</option> 
     <option>Element2</option> 
     <option>Element3</option> 
     <option>Element4</option> 
     <option>Element5</option> 
     <option>Element6</option> 
    </select> 
    </div> 
    <div> 
    <input type="text"> 
    </div> 
</div> 

Javascriptを - jQueryの

$('.test').on('change',$('.divSelect').children('select'),function(){ 
    updateTime(); 
}); 

function updateTime() { 
    var tipoPauta = { 'Element1':1, 
        'Element2':2, 
        'Element3':3, 
        'Element4':4, 
        'Element5':5, 
        'Element6':6 
        } 

    var select = $('.divSelect').children('select'); 
    $('.divInput').children('input').val(tipoPauta[select.val()]); 
}; 

JSBIN CODE

ありがとうございました!私はこの問題に夢中です。

+4

委任イベントハンドラのようなものでなければなりません()' **文字列が** 2番目の引数としてではなく、jQueryのコレクション – adeneo

+1

あなたが使用できる必要がありますあなたが必要とする要素に到達するための相対パス...例えば、 "親フォームを見つけ、このフォーム内でXのクラスを持つ子を見つける"ように、あなたは選択ボックスに最も近い入力テキストフィールドしか見つけられませんあなたは使用しています。 –

+0

アデネオなぜ私に説明してくれますか? Taryn Eastに感謝します! –

答えて

1

@adeneoは2番目の引数としてセレクタとして文字列を指定する必要があります。また、正しい入力要素を更新するために、あなたのコードは、上の `使用

$('.test').on('change', '.divSelect' ,function(){ 
    var $select = $(this).find('select'); 
    updateTime($(this), $select); 
}); 



function updateTime($divelement, $selectelement) { 
    var tipoPauta = { 'Element1':1, 
        'Element2':2, 
       'Element3':3, 
       'Element4':4, 
       'Element5':5, 
       'Element6':6 
       } 

    var $input = $divelement.next().children('input'); 

    $input.val(tipoPauta[$selectelement.val()]); 
}; 
+0

素晴らしい!私はそれを得る、あなたのソリューションは完全に動作します、ありがとう! –

+0

あなたはなぜ$ name変数を教えてくれますか?通常の名前変数との違いは何ですか? –

+1

それ自体に違いはありません。これは、jQueryオブジェクトを格納する変数に '$'記号を付けるために多少広く使用されている規則です。通常の名前変数は、古典的なjavascriptオブジェクトを格納するために使用されます。 変数にjQuery関数を使用できるかどうかを素早く知るための方法は違います。私はまた、通常、上記の例で忘れてしまった変数をラクダのケースに入れます。 –

関連する問題