【发布时间】:2020-12-24 15:54:36
【问题描述】:
一旦加载页面或视图,就会触发点击,并在vue.js 中触发popup 以编辑数据表行。我找不到这么好的VUE方式,虽然下面的链接提到了一种方式如下:
https://forum.vuejs.org/t/how-to-trigger-a-click-event-through-code-in-vuejs-on-page-load/92582
mounted: function () {
setTimeout(function(){
const elem = document.getElementById('myBtn');
elem.click();
}, 100);
},
我以类似的方式进行了以下操作。 try catch 包含错误,尽管它很丑陋,因为在某些时候数据不存在。
edit: function (idx, row) {
... nore code here ...
try {
document.getElementById(row.id).click(); // row.id is dynamic or variable
} catch (error) {
// pass
}
},
但是我的队友,一个 vue.js 爱好者,说这不是该死的 VUE 方式。现在做这种事情的正确方法是什么?
以下 Demo 可用于预期工作:
Vue.config.devtools = false;
Vue.config.productionTip = false;
new Vue({
el: '#app',
data: {
li_address: [{name: 'CA'}, {name: 'NY'}, {name: 'AL'}],
name: 'NY'
},
methods: {
},
mounted() {
console.log(['this.name', this.name]);
// this.$refs[this.name].click(); // failed
document.getElementById(this.name).click(); // worked. the click is triggered upon this.name
}
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap/dist/css/bootstrap.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/uikit/2.27.5/css/uikit.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/2.27.5/js/uikit.min.js"></script>
<div id="app" class="container">
<div class="uk-grid" uk-grid>
<div v-for="r in li_address">
<label>{{r.name}}
<input :id="r.name" :ref="r.name" type="radio" class="uk-radio" :value="r"
name="address_group">
</label>
</div>
</div>
</div>
【问题讨论】:
-
为什么不直接调用click handler方法呢?
-
@Dan 是弹窗,必须在弹窗加载后点击。我不确定我是否理解你提到的方式。
-
弹出窗口是您应用的一部分吗?如果是这样,您应该显示该组件以便更容易解释
-
其实就是一个数据表,弹窗就是编辑一行。单击编辑按钮后,弹出窗口将填充数据行。弹窗加载后,需要点击一下。
-
您需要在问题中显示所有相关的组件模板+代码,而不是描述它
标签: javascript vue.js vuejs2