Vue.js:触发 select 更改为 jQuery 后更新 v-model 值
Vue.js: update v-model value after triggering select change with jQuery
HTML:
<select v-model="model">
<option hidden disabled v-bind:value="false" selected>Placeholder</option>
<option v-for="item in array" v-bind:value="item.id"> @{{ item.name }}</option>
</select>
我有一个与上面非常相似的 select,我正在使用一些 jQuery 来更新 select 框。但是,我似乎无法更新 v-model 以与 jQuery 更改保持一致。
jQuery:
.on('mousedown', '.class', function (evt) {
evt.preventDefault();
$(this).find('option:first').prop('selected', true).val(false).change();
});
这里的 jQuery 在清除按钮上侦听 mousedown
事件,select 是占位符选项,即重置 select 框。但是我希望 .val(false).change()
足以触发 v-model 更新 - 但事实并非如此。
你可以试试 v-model.lazy 这个:
<select v-model.lazy="model">
自从发布这篇文章后,我做了更多的研究,我偶然发现了这个 Whosebug question。
jQuery 更改事件未触发本机侦听器时出现问题。
为了解决这个问题,我根据通过 link 找到的投票最多的答案添加了一个片段。
evt.preventDefault();
$(this).removeClass('x onX').find('option:first').prop('selected', true);
let el = $(this).get(0);
let event = document.createEvent('Events');
event.initEvent('change', true, false);
el.dispatchEvent(event);
HTML:
<select v-model="model">
<option hidden disabled v-bind:value="false" selected>Placeholder</option>
<option v-for="item in array" v-bind:value="item.id"> @{{ item.name }}</option>
</select>
我有一个与上面非常相似的 select,我正在使用一些 jQuery 来更新 select 框。但是,我似乎无法更新 v-model 以与 jQuery 更改保持一致。
jQuery:
.on('mousedown', '.class', function (evt) {
evt.preventDefault();
$(this).find('option:first').prop('selected', true).val(false).change();
});
这里的 jQuery 在清除按钮上侦听 mousedown
事件,select 是占位符选项,即重置 select 框。但是我希望 .val(false).change()
足以触发 v-model 更新 - 但事实并非如此。
你可以试试 v-model.lazy 这个:
<select v-model.lazy="model">
自从发布这篇文章后,我做了更多的研究,我偶然发现了这个 Whosebug question。
jQuery 更改事件未触发本机侦听器时出现问题。
为了解决这个问题,我根据通过 link 找到的投票最多的答案添加了一个片段。
evt.preventDefault();
$(this).removeClass('x onX').find('option:first').prop('selected', true);
let el = $(this).get(0);
let event = document.createEvent('Events');
event.initEvent('change', true, false);
el.dispatchEvent(event);