为这个苦苦挣扎了几天。
我需要创建一个使用 Vuejs 框架的 laravel 黄昏测试。有一种方法可以在用户按下 ENTER 键时触发。我刚刚发现jQuery可以通过使用.trigger()
方法以编程方式触发Enter Key:
$('.text-input').trigger($.Event("keypress", {keyCode: 13}))
它工作正常,但不会触发与.text-input
. 知道为什么它不起作用,还有其他方法可以满足要求吗?
非常感谢你们的任何帮助。
为这个苦苦挣扎了几天。
我需要创建一个使用 Vuejs 框架的 laravel 黄昏测试。有一种方法可以在用户按下 ENTER 键时触发。我刚刚发现jQuery可以通过使用.trigger()
方法以编程方式触发Enter Key:
$('.text-input').trigger($.Event("keypress", {keyCode: 13}))
它工作正常,但不会触发与.text-input
. 知道为什么它不起作用,还有其他方法可以满足要求吗?
非常感谢你们的任何帮助。
我猜 $.Event 是原生事件的 jQuery 事件包装器,它似乎触发了我们在某些情况下需要原生事件的实际事件。
var e = document.createEvent('HTMLEvents');
e.keyCode = 13;
e.initEvent('keypress', false, true);
$('.text-input').get(0).dispatchEvent(e);
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.0.3/vue.js"></script>
</head>
<body>
<div id="app">
{{ message }}
<input type='text' @keypress="test" id='ok' value='2 sec wait for it' />
</div>
<script>
new Vue({
el: '#app',
data: { message : 'testing man' },
methods: {
test(e) {
console.log('wait for it enter triggered : ' + e.keyCode)
}
}
});
setTimeout( () => {
// modern browsers, IE9+
var e = document.createEvent('HTMLEvents');
e.keyCode = 13;
e.initEvent('keypress', false, true);
$('#ok').get(0).dispatchEvent(e);
},2000)
</script>
</body>
</html>
你能试试这个,让我们知道是否有效。
首先,感谢@HardikSatasiya 提供答案。是的,它非常有用,所以我想回报一下,以便未来的开发人员在遇到此问题时将其作为参考。道歉,如果这个评论这么晚了。我差点忘了这件事。
上面的示例运行良好,但是,我遇到了另一个问题。场景是,在 laravel 黄昏测试中,我想在字段中放置一个文本,然后触发 Vue.js 的 ENTER 键事件。它实际上是 JQuery 和 Vue.js 的协作。我的最终代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.0.3/vue.js"></script>
</head>
<body>
<div id="app">
<div>
<label>Label</label>
<input type='text' @keyup.13="myMethod" v-model='my_vue_element'/>
</div>
</div>
<script>
new Vue({
el: '#app',
data: {my_vue_element: ''},
methods: {
myMethod() {
alert(this.my_vue_element)
}
}
})
$(() => {
// init enter event
var enter_key = document.createEvent("HTMLEvents")
enter_key.keyCode = 13
enter_key.initEvent("keyup", false, true)
// select element in jquery format
let jquery_element = $('label:contains("Label")').parent().find('input')
// this is not native in jquery I guess
let javascript_element = jquery_element.get(0)
// put a value in text field
jquery_element.val('Kanpai!')
// the issue here is that, you need to dispatch an event at the specified eventTarget, the input.
// usefull content in this link https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent
javascript_element.dispatchEvent(new Event("input"))
setTimeout(() => {
// trigger ENTER event
javascript_element.dispatchEvent(enter_key)
}, 1000)
})
</script>
</body>
</html>