2016-08-09 3 views
0

У меня проблема с кодом Js/Rails. У меня есть форма, которая создается динамически, когда я нажимаю кнопку (она может создавать несколько этих форм на одной странице), она содержит выбор, у которого есть идентификатор, который никогда не совпадает. Мне нужно поместить некоторое значение в ввод в соответствии со значением выбора. В первом виде он работает отлично, но позже в других формах он не работает. Как я уже сказал, у меня нет доступа к ID, потому что они созданы в рельсах.Как привязать значение выбора к вводу при его динамическом создании

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

делегирован обработчиков событий с помощью 'на()' должны иметь ** строку ** в качестве второго аргумента, а не сборник JQuery – adeneo

+1

Вы можете использовать относительные пути, чтобы добраться до нужного элемента ... например, «найти родительскую форму, а затем в этой форме найти ребенка с классом X», чтобы вы нашли только ближайшее текстовое поле ввода в поле выбора ты используешь. –

+0

adeneo Можете ли вы объяснить, почему, пожалуйста? Спасибо, Taryn East! –

ответ

1

Как упоминалось в @adeneo, вам нужно указать строку как селектор в качестве второго аргумента. Кроме того, чтобы обновить правильный элемент ввода, код должен быть что-то вроде

$('.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 для переменной или нет. Я также обычно верблюд случай переменных, которые я забыл сделать в приведенном выше примере. –

Смежные вопросы