Symfony:隐藏/显示表单元素,取决于具有数据库条目的下拉选择

时间:2017-09-20 15:23:50

标签: forms symfony dependencies show-hide

我希望我的标题是正确的:我有一个下拉列表,来自一个表单作为EntityType,值来自实体类。代码:

   ->add('type', EntityType::class, array(
      'class' => 'DocumentBundle:DocumentType',
      'label' => 'label.type',
      'property' => 'translationKey',
      'required' => true,
      'multiple' => false,
      'expanded' => false,
      'empty_value' => 'label.select_type',
      'choice_translation_domain' => 'Documents'
      ))
  ->add('vka_number', 'text', array(
      'label' => 'label.vka_number',
      'required' => false,
      'translation_domain' => 'Documents'))

第二个是文本字段(vka_number),我只想在选择该下拉列表中的特定值时显示该字段 在我的树枝模板中,我渲染元素:

<div class="row">
  <div class="col-md-6" id="documentDropdown">
    {{ form_row(form.type) }}
  </div>

  <div class="col-md-6" id="vka">
    {{ form_row(form.vka_number) }}
  </div>
</div>

我正在考虑像这样的javascript函数:

<script>
    $(document).ready(function(){
    $('#documentDropdown').on('change', function(){
       if (this.value == 'Contract')
       {
         $('#vka').show();
       }
        else {
         $('#vka').hide();
       }
    });
    });
    </script>

但是它没有用,我认为这是因为它无法访问下拉列表中的值,因为它们不是硬编码的,而是数据库条目。 'Contract'将是“使得”vka_number文本字段出现的条目(id = 1)。

2 个答案:

答案 0 :(得分:1)

我从your previous question Sonja复制了html代码,你似乎还在继续问同样的问题。我在这个jsfiddle中使用了那段代码:

https://jsfiddle.net/alvinbunk/to9qodwx/

您可以使用jsfiddle来试验您的jQuery代码,以找出问题所在。正如您所看到的,代码确实有效并且隐藏了vka id分区。它实际上与值来自数据库的事实无关。确保您的html代码中的各种元素中没有重复的ID。在浏览器中使用“查看源代码”查看呈现的代码。

顺便说一下,我在这个答案上花了至少15分钟,而在另一个答案上花了15到30分钟。请注意,StackOverflow上的人非常忙碌,最好非常清楚地提出您的问题。

编辑#2 - 基于评论

使用此jQuery代码:

<script>
$(document).ready(function(){
$('#documentDropdown').on('change', function(){
   if (this.value == '1')
   {
     $('#vka').show();
   }
    else {
     $('#vka').hide();
   }
});
});
</script>

这应该有效。

答案 1 :(得分:1)

这是我的javascript函数,最终解决了我的问题。

 $(document).ready(function () {
    $('#type ').change(function() {
         if ($('select[id$="_type"]>option:selected').text() == "Contract") {
            $('#vka_number ').show();
        }
        else {
          $('#vka_number').hide();
        }
    });
});