javascript - 条件渲染可以使表单项可见,但无法隐藏它

标签 javascript html vue.js data-binding

我想要一个文本区域元素根据其前面的单选按钮的状态可见或不可见。如果选择“否”,则文本区域元素将被隐藏,如果选择"is",则文本区域元素将可见。

<fieldset class="input-group form-check form-check-inline">
    <input type="radio" v-model="elementIsVisible" 
           class="form-check-input" name="myFormInput" 
           id="myFormInputNo" value="false" required>
    <label for="myFormInputNo">No</label>

    <input type="radio" v-model="elementIsVisible"
           class="form-check-input" name="myFormInput" 
           id="myFormInputYes" value="true" required>
    <label for="myFormInputYes">Yes</label>
</fieldset>

<textarea v-if="elementIsVisible" class="form-control"></textarea>
<p>Debug: {{ elementIsVisible }}</p>
export default {
    data: function () {
        return {
            elementIsVisible: false
        }
    }
}

其初始行为按预期工作,选择"is"时会显示该元素,但如果将单选按钮更改回“否”,则 textarea 元素将保持其可见状态。

调试元素按预期运行,选择 yes 单选按钮时显示“yes”,选择 no 单选按钮时显示“no”。

最佳答案

问题是单选按钮的值默认是一个字符串,而不是您期望的 bool 值。值 'true' 的字符串是 true,值 'false' 的字符串也是 true,这将使 v-if 始终显示文本区域。至少使用 :value 而不是 value 使值实际上是一个 bool 值,可以与 v-if 一起使用来有条件地显示文本区域:

<div>
  <fieldset class="input-group form-check form-check-inline">
    <input type="radio" v-model="elementIsVisible" class="form-check-input" name="myFormInput" id="myFormInputNo" :value="false" required>
    <label for="myFormInputNo">No</label>
    <input type="radio" v-model="elementIsVisible" class="form-check-input" name="myFormInput" id="myFormInputYes" :value="true" required>
    <label for="myFormInputYes">Yes</label>
  </fieldset>
  <textarea v-if="elementIsVisible" class="form-control"></textarea>
  <p>Debug: {{ elementIsVisible }}</p>
</div>

这是一个example在行动中。它演示了在 DOM 中添加/删除的 textarea

希望有帮助!

关于javascript - 条件渲染可以使表单项可见,但无法隐藏它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56656058/

相关文章:

javascript - 检查删除和更新 ui angular ngResource 模块

html - 当我使用 ngRouter 时,导航栏不会折叠

javascript - 如何更改Javascript音频对象src?

javascript - vue 组件和 vue 实例之间的通信

javascript - 在 Vuetify 组合框中通过 @change 传递目标元素

javascript - 使用默认墨卡托投影比例的 D3 初始缩放

javascript - 在可折叠 jquery-mobile 中添加动态可过滤控制组

html - iPad 水平滑动导致页面向右或向左跳转并返回

vue.js - 如何在nuxt的插件中访问存储上下文?

JavaScript:在 hashchange 上按名称调用函数