jquery - 当Jquery更改文本输入时,Vuejs如何强制v-model更新?

标签 jquery vue.js vuejs2 timepicker

我有 4 个带有时间选择器弹出窗口的输入。我正在使用 jquery timepicker 插件,它没有任何明显的方法来通过回调操作输入。但 Vuejs 不会检测到文本字段的更改,即使它们在屏幕上清晰可见,直到在输入字段中按下按键。

   <input data-ref="timeSelectionInput" v-model="item.StartTime"  type="text" data-ref="timeSelectionInput">

我尝试了这个,但它搞砸了,并将值随机更改为其他输入字段之一。

  var timeSelectionInput = document.querySelectorAll("input[data-ref=timeSelectionInput]");
  for (let i = 0; i < timeSelectionInput.length; i++) {
    timeSelectionInput[i].dispatchEvent(new Event('input'));
    console.log('input even dispatched')
  }

我们应该如何更新模型以匹配以编程方式引起的更改,以及为什么它在 vuejs 上如此复杂?它应该像 Angular 对区域所做的那样检测变化。如有任何帮助,我们将不胜感激。

最佳答案

您需要在 jQuery 上下文中访问 Vue 的数据对象。这意味着它需要在范围内。下面我演示一种方法。

我没有使用时间选择器插件,而是使用了一个按钮。我不确定时间选择器插件具体是如何工作的,但我确信有一个回调会在您可以使用的某种更改事件上触发。

let data = {
  value: 'initial',
};

new Vue({
  el: '#app',
  data: data,
});

$(document).ready(function () {
  $('button').on('click', function () {
    data.value = 'changed';
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="app">
  <input v-model="value">  
</div>
<button>Change value via jQuery listener</button>

关于jquery - 当Jquery更改文本输入时,Vuejs如何强制v-model更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50768764/

相关文章:

javascript - 当我在 cordova 应用程序中的 Android 设备中打开相机时,设备后退按钮代码不起作用

javascript - 如何在超时时打开此模式?

javascript - 在 v-for 中创建局部变量

javascript - 让 VueI18n 对路由器链接标签使用react

node.js - vuejs 2 axios 放置,删除

javascript - 月经追踪日历

javascript - 当按下空格时,Vue js 过滤器不起作用

vue.js - 当 v-for 渲染的对象发生变化时如何更新 DOM?

javascript - 如何覆盖 Trix HTMLSanitizer 以允许带有 class 的 span 标签

jquery - 根据另一个列下拉列表更改 Telerik 网格列的只读属性