Symfony 4 - 如何使用 Javascript 删除树枝上的选择?

基埃加

我的表单有一个 symfony 4 项目。在我的 formType 中,我有一个 choiceType 像:

->add('momentDebut', ChoiceType::class, [
                'choices' => [
                    "matin" => "matin",
                    "après-midi" => "après-midi",
                    "journée" => "journée"
                ],

在我的树枝中,我有一个选择:

<select class="browser-default custom-select" id="choiceUser" onchange="choiceDay(this)">
                <option value="" disabled selected>Choisissez la durée de l'absence</option>
                <option value="jour">La journée</option>
                <option value="periode">Du xx au xx</option>
            </select>

使用 onChange 函数显示或不显示某些元素。当我选择“Du xx au xx”时,我希望我的“momentDebut”显示除“day”之外的所有选项。

编辑:

我的树枝:

//...
<select class="browser-default custom-select" id="choiceUser" onchange="choiceDay(this)">
                <option value="" disabled selected>Choisissez la durée de l'absence</option>
                <option value="jour">La journée</option>
                <option value="periode">Du xx au xx</option>
            </select>
//...
<div id="momentDebut">
    <div class="row">
        <div class="col">
            {{form_row(form.dateDebut)}}
        </div>
        <div class="col">
            {{form_row(form.momentDebut)}}
        </div>
    </div>
</div>
//...

EDIT2:源代码中我的(早上,下午,白天)HTML:

<div id="absence_momentDebut">
    <div class="form-check">
        <input type="radio" id="absence_momentDebut_0" name="absence[momentDebut]" required="required" class="form-check-input" value="matin">
        <label class="form-check-label required" for="absence_momentDebut_0">matin</label>
    </div>
    <div class="form-check">
        <input type="radio" id="absence_momentDebut_1" name="absence[momentDebut]" required="required" class="form-check-input" value="après-midi">
        <label class="form-check-label required" for="absence_momentDebut_1">après-midi</label>
    </div>
    <div class="form-check">
        <input type="radio" id="absence_momentDebut_2" name="absence[momentDebut]" required="required" class="form-check-input" value="journée">
        <label class="form-check-label required" for="absence_momentDebut_2">journée</label>
    </div>
</div>

我像这样更新了我的代码:

function choiceDay(select) {
            var valeur = select.options[select.selectedIndex].value;
            var targetSelect = document.querySelector('[name="absence[momentDebut]"]');
            var targetOption = document.querySelector('[name="absence[momentDebut]"][value="journée"]');
            console.log(targetSelect.value);
            console.log(targetOption);


            // var choice = $('#choiceMomentDebut').text();
            // console.log(choice);

            switch (valeur) {
                case "periode":
                    document.getElementById("absence").style.visibility = "visible";
                    document.getElementById("momentDebut").style.visibility = "visible";
                    document.getElementById("momentFin").style.visibility = "visible";

                    if (targetOption.value == "journée") { // Reset the selection to the default if it's currently selected
                        targetSelect.selectedIndex = 0;
                    }
                    // Disable the selection
                    targetOption.setAttribute('disabled', true);

                    break;

                case "jour":
                    document.getElementById("absence").style.visibility = "visible";
                    document.getElementById("momentDebut").style.visibility = "visible";
                    document.getElementById("momentFin").style.visibility = "hidden";
                    targetOption.removeAttribute('disabled');
                    break;

                default:
                    break;
            }
        }

它似乎工作!问题出在这一行:

targetOption = targetSelect.querySelector('option[value="journée"]');

我用它代替了

var targetOption = document.querySelector('[name="absence[momentDebut]"][value="journée"]');

现在,一切都很好!

谢谢你的帮助 !!

留言

虽然并没有完全option按照您的要求删除,但一种可能的解决方案是禁用它,防止被选中,这会更容易一些。

function choiceDay(el) {
  targetRadio = document.querySelector('[name="absence[momentDebut]"]:checked');
  targetOption = document.querySelector('[name="absence[momentDebut]"][value="journée"]');

  if (el.value == "periode") {
    if (targetOption == targetRadio) {
      // Uncheck if it's currently selected      
      targetOption.checked = false;
    }
    // Disable the selection
    targetOption.setAttribute('disabled', true);
  } else {
    targetOption.removeAttribute('disabled');
  }
}
<select class="browser-default custom-select" id="choiceUser" onchange="choiceDay(this)">
  <option value="" disabled selected>Choisissez la durée de l'absence</option>
  <option value="jour">La journée</option>
  <option value="periode">Du xx au xx</option>
</select>

<div id="absence_momentDebut">
  <div class="form-check">
    <input type="radio" id="absence_momentDebut_0" name="absence[momentDebut]" required="required" class="form-check-input" value="matin">
    <label class="form-check-label required" for="absence_momentDebut_0">matin</label>
  </div>
  <div class="form-check">
    <input type="radio" id="absence_momentDebut_1" name="absence[momentDebut]" required="required" class="form-check-input" value="après-midi">
    <label class="form-check-label required" for="absence_momentDebut_1">après-midi</label>
  </div>
  <div class="form-check">
    <input type="radio" id="absence_momentDebut_2" name="absence[momentDebut]" required="required" class="form-check-input" value="journée">
    <label class="form-check-label required" for="absence_momentDebut_2">journée</label>
  </div>
</div>

不管你最终做了什么,你应该在 php 中添加一些验证,因为你可以在禁用 javascript 的情况下提交任何值。您可以找到几个 关于此的问题

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Symfony 2.7使用VichUploaderBundle在树枝上渲染图像

来自分类Dev

Symfony 4删除Cookie

来自分类Dev

如何使用Symfony 4上传音乐

来自分类Dev

Symfony 4 如何使用我自己的 Bundle

来自分类Dev

在Symfony 4或Symfony 5新项目上安装树枝/扩展程序

来自分类Dev

如何安装 Symfony 4 而不是 Symfony 3.4?

来自分类Dev

如何在 Symfony 4 的主页上包含导航栏?

来自分类Dev

从Symfony 4中的树枝模板调用服务

来自分类Dev

树枝中的 Symfony4 翻译

来自分类Dev

如何将树枝过滤器注册到Symfony 4中?

来自分类Dev

在Symfony 2中使用javascript添加选择

来自分类Dev

在Symfony 2中使用javascript添加选择

来自分类Dev

使用 symfony 4 从树枝中的 collectionType 表单渲染一个字段

来自分类Dev

如何从Javascript生成带有参数值的Symfony 2树枝URL?

来自分类Dev

如何从Javascript生成带有参数值的Symfony 2树枝URL?

来自分类Dev

我如何使用@ManyToMany Symfony4保留数据

来自分类Dev

如何在 symfony 4 中使用单文件 vue 组件?

来自分类Dev

如何在我的 Formbuilder (Symfony 4) 中使用占位符?

来自分类Dev

symfony4 如何使用实体关系创建 DataFixtures

来自分类Dev

Symfony4 如何使用查询构建器获取对象

来自分类Dev

如何使用学说(Symfony 4)输出多对一数据?

来自分类Dev

我如何在 symfony 4 中使用 owl carousel?

来自分类Dev

如何使用 Symfony 4 从 Web URL 生成 pdf?

来自分类Dev

如何删除选择上的名称并使用 javascript 或 jquery 在 textarea 上添加名称?

来自分类Dev

如何使用Symfony访问树枝扩展中的全局服务功能?

来自分类Dev

在使用symfony3的树枝中,“ {%use%}”如何工作?

来自分类Dev

如何在symfony树枝文件中使用全局变量?

来自分类Dev

如何在foreach Symfony 2〜树枝中使用渲染变量

来自分类Dev

Symfony如何在树枝中使用控制器功能?

Related 相关文章

  1. 1

    Symfony 2.7使用VichUploaderBundle在树枝上渲染图像

  2. 2

    Symfony 4删除Cookie

  3. 3

    如何使用Symfony 4上传音乐

  4. 4

    Symfony 4 如何使用我自己的 Bundle

  5. 5

    在Symfony 4或Symfony 5新项目上安装树枝/扩展程序

  6. 6

    如何安装 Symfony 4 而不是 Symfony 3.4?

  7. 7

    如何在 Symfony 4 的主页上包含导航栏?

  8. 8

    从Symfony 4中的树枝模板调用服务

  9. 9

    树枝中的 Symfony4 翻译

  10. 10

    如何将树枝过滤器注册到Symfony 4中?

  11. 11

    在Symfony 2中使用javascript添加选择

  12. 12

    在Symfony 2中使用javascript添加选择

  13. 13

    使用 symfony 4 从树枝中的 collectionType 表单渲染一个字段

  14. 14

    如何从Javascript生成带有参数值的Symfony 2树枝URL?

  15. 15

    如何从Javascript生成带有参数值的Symfony 2树枝URL?

  16. 16

    我如何使用@ManyToMany Symfony4保留数据

  17. 17

    如何在 symfony 4 中使用单文件 vue 组件?

  18. 18

    如何在我的 Formbuilder (Symfony 4) 中使用占位符?

  19. 19

    symfony4 如何使用实体关系创建 DataFixtures

  20. 20

    Symfony4 如何使用查询构建器获取对象

  21. 21

    如何使用学说(Symfony 4)输出多对一数据?

  22. 22

    我如何在 symfony 4 中使用 owl carousel?

  23. 23

    如何使用 Symfony 4 从 Web URL 生成 pdf?

  24. 24

    如何删除选择上的名称并使用 javascript 或 jquery 在 textarea 上添加名称?

  25. 25

    如何使用Symfony访问树枝扩展中的全局服务功能?

  26. 26

    在使用symfony3的树枝中,“ {%use%}”如何工作?

  27. 27

    如何在symfony树枝文件中使用全局变量?

  28. 28

    如何在foreach Symfony 2〜树枝中使用渲染变量

  29. 29

    Symfony如何在树枝中使用控制器功能?

热门标签

归档