2013-11-14 5 views
1

Мне нужно создать форму со многими тэгами select и в каждом теге select откроется другой select, и в этом выберите другой и другой, другой и другой до конца формы.Как я могу связать свою форму только одной функцией?

У меня есть это сейчас http://jsfiddle.net/8SZ5n/1/, но это не общее, и мне нужно будет вызвать эту функцию в каждом выборе.

<script type="text/javascript"> 
$(function() { 
    $('.select').change(function(){ 
     if ($(this).val() == "1") { 
      $('.divR1').show(); 
      $('.divR2').hide(); 

     }else if($(this).val() == "2"){ 
      $('.divR2').show(); 
      $('.divR1').hide(); 
     } 

     else { 
      $('.divR1').hide(); 
      $('.divR2').hide(); 
     } 
    }); 
}); 
</script> 

<div id="div1"> 
    <select class="select" autocomplete="off"> 
     <option value="#" checked>Escolha</option> 
     <option value="1">Sim</option> 
     <option value="2">Não</option> 
    </select> 

    <div class="divR1" style="display:none"> 
     1 
     <select autocomplete="off"> 
      <option value="#" checked>Escolha</option> 
      <option value="1">Sim</option> 
      <option value="2">Não</option> 
     </select> 
    </div> 

    <div class="divR2" style="display:none"> 
     2 
     <select autocomplete="off"> 
      <option value="#" checked>Escolha</option> 
      <option value="1"></option> 
      <option value="2"></option> 
     </select> 
    </div> 
</div> 

ответ

1

http://jsfiddle.net/8SZ5n/5/

$(function() { 
    $(".select").change(function() { 
     var next = $('option', this).filter(':selected').attr('next'); 
     $($(this).attr('hide')).hide(); 
     if (next != undefined) { 
      $(next).show(); 
     } 
    }); 
}); 
+0

Такая же проблема. Если я попытаюсь добавить новый div с именем id = "div2", второй выбор может изменить первый. Как и этот jsfiddle.net/8SZ5n/8 –

+0

Посмотрите внимательно на часть html http://jsfiddle.net/8SZ5n/5/ У каждого div есть свой собственный класс, каждый из которых имеет атрибут «hide» (селектор элементов, который должен быть скрыт если ничего не выбрано), и каждая опция имеет атрибут «следующий» (селектор элемента, который должен отображаться при выборе этой опции). –

1
$(function() { 
    $(".select").change(function() { 
     var id = $(this).val(); 
     $(".selectDiv").hide(); 
     $(".divR" + id).show(); 
    }); 
}); 

Я добавил класс "selectDiv" для всех зависимых дивы; Кроме того, «divR» должен быть ID муравей не класс, если он уникален;)

EDIT jsFiddle

+0

Рассмотрите возможность использования функции jquery next(), таким образом, вы можете обойтись без ссылки «id». $ (this) .parent ('div'). next ('div'). find ('select') – lvil

+0

Можете ли вы разместить ссылку JSFiddle, пожалуйста? –

+1

Я отредактировал свой ответ с помощью ссылки JSFiddle;) –

1

Ну, вы не четко определить конец формы так, вот один пример, который продолжает идти до вы хотите, чтобы он :)

JSFiddle

$(function() { 
    $('select').change(handler); 
}); 

function handler() { 
    var x = $(this); 
    if (x.val() != '#') { 
     var div = $('<div>').append(x.val()); 
     x.parent().append(div); 
     var select = $('<select>') 
      .attr('autocomplete', 'off') 
      .change(handler) 
      .append($('<option>').attr('value', '#').append('Escolha')) 
      .append($('<option>').attr('value', '1').append('Sim')) 
      .append($('<option>').attr('value', '2').append('Não')); 
     div.append(select); 
    } else { 
     x.siblings().remove(); 
    } 
} 
+0

Работает отлично, но каждый тег select не может создать более одного нового выбора. Каждый выбор должен показывать только выбранную опцию. Пример: Первый выбор: Да или нет? Ans: Not (новый div + новый выбор с да или нет) –

+0

В этом случае, если я изменю параметр от «Sim» до «Não», обе опции продолжатся в режиме показа, мне нужно, чтобы только параметры, выбранные в пути показаны. И если выбранная опция изменяется в любое время, новый div с другим select или form должен перезаписать фактический div. –

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