el-radio控件click事件触发两次的解决办法

ElementUIel-radio双击事件解决方案
文章讲述了在ElementUI中,el-radio控件的点击事件由于label和input标签的存在而被触发两次的问题,提供了两种解决方法:一是使用`.prevent`修饰符阻止事件传递,二是通过判断触发事件的标签来避免其中一个事件触发。
<el-radio v-model="value" @click.native="handleClick" :label="1">radio</el-radio>

methods: {
    handleClick(el) {
        alert('点击')
   }
 }

问题:发现点击事件被触发了两次。

原因:elementui中,el-radio控件包含了label和input标签,在el-radio上设置了点击事件,让两个标签都拥有了该事件,所有click方法被调用了2次。

解决办法

方法1.  增加prevent修饰符阻止事件传递

<el-radio v-model="value" @click.native.prevent="handleClick" :label="1">radio</el-radio>

方法2. 因为都触发了input标签和label标签的点击事件,可以通过对应事件的标签作加判断阻止其中一个就可以了。

 methods: {
   handleClick(el) {
        // 当是input标签触发的点击事件时,阻止该事件
        if (el.target.tagName === 'INPUT') return
        alert('点击')
   }
 }
<el-dialog :close-on-click-modal=“false” :title=“form && form.id ? ‘查看白名单’ : ‘新增白名单’” :visible.sync=“dialogVisible” width=“800px” @close=“handleCancel” > <el-select v-model=“form.signerId” placeholder=“人员工号或姓名” clearable filterable remote :remote-method=“searchStaff” :loading=“loadingStaff” style=“width: 240px” @change=“handleStaffChange” > <el-form-item label="免学习产品" required></el-form-item> <!-- 学习产品选择 --> <el-form-item label="保司" required> <el-radio-group v-model="form.insuranceCompanyScope" @change="handleScopeChange($event, 1)" > <el-radio :label="1">全部</el-radio> <el-radio :label="2">部分</el-radio> </el-radio-group> </el-form-item> <!-- 部分产品选择区域 --> <el-form-item label="" v-if="form.insuranceCompanyScope =='2'"> <el-select multiple collapse-tags v-model="form.insuranceCompanyIds" placeholder="请选择" style="width: 280px" filterable > <el-option v-for="item in insuranceList" :key="item.id" :label="`${item.name}(${item.areaInfo})`" :value="item.id" /> </el-select> </el-form-item> <el-form-item label="产品" required v-if="form.insuranceCompanyScope =='2'"> <el-radio-group v-model="form.productScope" @change="handleScopeChange($event, 2)" > <el-radio :label="1">全部</el-radio> <el-radio :label="2">部分</el-radio> </el-radio-group> </el-form-item> <el-form-item v-if="form.productScope=='2' &&form.insuranceCompanyScope =='2'"> <el-select v-model="form.product" placeholder="请输入产品编码和名称" clearable filterable remote :remote-method="searchProduct" :loading="loadingProduct" style="width: 240px" > <el-option v-for="sitem in productOptions" :key="sitem.productId" :value="sitem.productId" :label="`${sitem.productName} (${sitem.productId})`" /> </el-select> <el-button type="primary" size="mini" @click="addProduct"> 新增 </el-button> </el-form-item> <!-- 已选产品列表 --> <div v-if="form.productScope=='2' &&form.insuranceCompanyScope =='2'"> <el-table :data="selectedProducts" border style="width: 100%; margin-top: 10px" :show-header="selectedProducts.length > 0 && form.productScope=='2'" > <el-table-column prop="productId" label="产品编码"></el-table-column> <el-table-column prop="productName" label="产品名称" ></el-table-column> <el-table-column prop="productSimpleChineseName" label="简体中文名称" ></el-table-column> <el-table-column prop="productEnglishName" label="英文名称" ></el-table-column> <el-table-column prop="insuranceCompanyName" label="保司"></el-table-column> <el-table-column prop="insuranceCompanyArea" label="地区"></el-table-column> <el-table-column prop="insType" label="险种" :formatter="(row) => (row.insType == '1' ? '长险' : '短险' || '-')" ></el-table-column> <el-table-column prop="productType" label="分类" ></el-table-column> <el-table-column label="操作"> <template slot-scope="scope"> <el-button type="text" size="small" class="delete-btn" @click="deleteProduct(scope.$index)" > 删除 </el-button> </template> </el-table-column> </el-table> </div> </el-form> <div slot="footer" class="dialog-footer"> <el-button @click="handleCancel">取消</el-button> <el-button type="primary" @click="handleSave">保存</el-button> </div> </el-dialog>提交校验
08-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值