我已将事件附加到文本框中addEventListener.它工作正常.当我想以编程方式从另一个函数触发事件时,我的问题出现了.
我该怎么做?
我有一个包含一些数据和上传的表单.只有在成功接收和处理数据后才能启动上载.为此,我在我的地方进行ajax调用
click()的最后一件事不起作用,因为似乎异步调用块打开了一个上传窗口.它只有在我设置时才有效async: false.
我在文档和本网站中找不到任何内容,想知道那里有什么问题,以及如何让它保持调用异步?
例:
$.ajax({
type: "POST",
url: "/Save",
data: jsonText,
dataType: "json",
//async: false [1]
}).done(function (msg) {
$("#upload").click();
});
//$("#upload").click(); [2]
Run Code Online (Sandbox Code Playgroud)
演示:http://jsfiddle.net/c2v00uxn/
注意:
UPDATE
它不是关于如何一般地进行"点击",而是关于如何在异步ajax调用之后单击(截至目前,仅适用于非异步调用).
我正在开发一个Google Chrome扩展程序,用于模拟网页上的键盘事件.
我发现event.initKeyboardEvent()因为这个webkit bug 而无法正常工作,我也找到了一些解决方法,例如SO Question
但是,在事件对象上定义属性不起作用,因为扩展的内容脚本具有自己的"并行世界",因此内容脚本中定义的属性对于Web页脚本不可见.
我唯一也是最后希望DOM 4 Event Constructors在Google Chrome中运行,并且可以通过构造函数正确初始化键盘事件
var event = new KeyboardEvent("keypress", {key: 'U+0041', char: 'a', ... })
Run Code Online (Sandbox Code Playgroud)
不幸的是,它失败了:
TypeError: illegal constructor
Run Code Online (Sandbox Code Playgroud)
我无法在Chrome中找到有关受支持的事件构造函数的任何文档.有人能指点我一些文档/源代码吗?
是否有其他方法可以在Google Chrome扩展程序中模拟键盘事件?
(注意,TextEvent,并将不会帮助,因为许多现实世界的控制听keydown/ keyup专)
javascript google-chrome google-chrome-extension dom-events content-script
我一直在努力解决谷歌扩展的问题,而你一如既往是我最后的希望!:))
好吧,我想点击我的chrome扩展程序上的按钮,这将导致页面扩展程序上的keydown模拟正在运行.
我认为chrome在我的想法上有一些安全问题,它会阻止键盘模拟(使事件isTrusted:false)并删除哪个属性.
我写的函数在jsfiddle上运行正常,但看起来chrome扩展以不同的方式完成它.
这是内容脚本文件:
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
if(request.action == "scrollToTop"){
}
else if(request.action == "scrollToBottom"){
}
else if(request.action == "enter"){
triggerKeyboardEvent(document,13);
}
function triggerKeyboardEvent(el, keyCode){
var event = new Event("keydown", {"bubbles":true, "cancelable":true});
event.which = keyCode;
el.dispatchEvent(event);
}
});
chrome.runtime.sendMessage({action : "show"});
Run Code Online (Sandbox Code Playgroud)
登录jsFiddle写道:
Event {isTrusted: false, which: 13}
Run Code Online (Sandbox Code Playgroud)
登录网站:
document.addEventListener('keydown',function (e) {
console.log(e)
}
Run Code Online (Sandbox Code Playgroud)
写道:
Event {isTrusted: false}
Run Code Online (Sandbox Code Playgroud)