复选框的Vue更改事件不起作用

Posted

技术标签:

【中文标题】复选框的Vue更改事件不起作用【英文标题】:Vue change event for checkbox is not working 【发布时间】:2021-03-09 13:19:48 【问题描述】:

我使用Vue来传递函数函数且检查复选框时,更改事件不会触发该功能。我不确定问题是因为我将它写在mounted上还是其他任何东西上。

mounted() 
        var self = this;
        let id = this.$route.params.id;

        var chkInfo = [];
        chk.where("partId", "==", id).get()
            .then(function (querySnapshot) 
                querySnapshot.forEach(function (doc) 
                    var data = doc.data();

                    chkInfo.push( chk_id: doc.id, d: data.detail, s: data.sequence, status: data.status );
                );

                let html = '';
                for (let i = 0; i < chkInfo.length; i++) 

                    html += `
                            <li class="todo-item">
                                <input type="checkbox" value="" @change="updateTodo()" class="todo-item__checkbox">
                                    <label class="word">$chkInfo[i].d</label>
                            </li>
                     `;
                
                self.todoList = html;
            )
    

Vue 的模板。我使用componentKey重新加载组件,以便数据可以动态填充到界面。

<section>
    <label>Checklist:<br/></label>
      <input v-model.trim="newTodo" id="todo-box" placeholder=" Add new todo"/>
       <button type="submit" @click.prevent="addTodo()" class="new-todo-button" :disabled="!todoFilled">Add</button>
           <ul class="todo-list">
               <div v-html="todoList"></div>
               <div v-html="addList" :key="listKey"></div>
           </ul>                      
 </section>

【问题讨论】:

你在哪里定义了updateTodo函数?..我没看到 是的,我在那里的方法上写了它。目前,函数中除了控制台日志消息外没有编写任何代码,并且日志消息不会出现在控制台中。 为什么不使用模板部分来创建 Dom 而不是 javascript 我在 javascript 中创建 dom 以根据从 firestore 获得的数据动态填充界面。我只尝试了一小部分这种方法。另外,我已经在整个项目中使用了该方法,实际上我现在无法更改其他部分。 【参考方案1】:

用 Vue 的方式用模板来做怎么样?

<template>
  <div>
    <div v-for="(info, index) in chkInfo" :key="index">
      <li class="todo-item">
        <input type="checkbox" v-model="info.d" @change="updateTodo(info.d)" class="todo-item__checkbox" />
        <label class="word">info.d</label>
      </li>
    </div>
  </div>
</template>

<script>
export default 
  data() 
    return 
      chkInfo: []
    
  ,
  mounted() 
    let id = this.$route.params.id;
    chk.where("partId", "==", id).get()
        .then(function (querySnapshot) 
            querySnapshot.forEach(function (doc) 
                var data = doc.data();
                chkInfo.push( chk_id: doc.id, d: data.detail, s: data.sequence, status: data.status );
            );
        )
      
  
</script>

如果实在无法修改模板,则应将其声明为 vue 实例外的全局函数。

【讨论】:

我已经在整个项目中使用该方法,实际上我现在无法更改其他部分。顺便说一句,我也尝试将值传递给函数,但该函数仍然没有触发。 您能展示一下您是如何在组件中呈现该 html 的吗? 当然,等一下我更新帖子。已更新 =) 由于 html 被渲染为纯 html,因此不会调用该函数,因为它不在 vue 实例中。我认为您需要将其移动到模板中。以你的方式调用它的方法是将它创建为 vue 实例之外的全局函数 哦,在那种情况下,我从 Vue 中移出该功能。谢谢你给我一个想法!

以上是关于复选框的Vue更改事件不起作用的主要内容,如果未能解决你的问题,请参考以下文章

复选框单击事件在数据表的第二页不起作用?

反应故事书复选框更改处理程序不起作用

更改复选框时的ajax发布表单jquery ajax不起作用

为啥 '@drop' 事件在 vue 中对我不起作用?

:disabled 表单按钮在 Vue 3 中不起作用

为啥从计算切换到方法时,以下 Vue.js 代码不起作用?