相关疑难解决方法(0)

如何在JavaScript中触发事件?

我已将事件附加到文本框中addEventListener.它工作正常.当我想以编程方式从另一个函数触发事件时,我的问题出现了.

我该怎么做?

javascript events triggers addeventlistener dom-events

504
推荐指数
10
解决办法
65万
查看次数

触发器在异步ajax done()上单击input = file

我有一个包含一些数据和上传的表单.只有在成功接收和处理数据后才能启动上载.为此,我在我的地方进行ajax调用

  1. 发送数据,
  2. 检查结果,
  3. 触发click()打开文件对话框.

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/

注意:

  • 如果我取消注释[1]或[2],它确实有效(文件对话框按预期显示).
  • 用触发器替换click()('click')不起作用
  • 用live()/ on()替换click()没有帮助
  • 文件上传控件是可见的(所以它不是因为隐藏控件)
  • ajax的超时设置没有帮助.

UPDATE

它不是关于如何一般地进行"点击",而是关于如何在异步ajax调用之后单击(截至目前,仅适用于非异步调用).

jquery

32
推荐指数
1
解决办法
5190
查看次数

如何使用Chrome扩展程序中的给定char/keycode初始化键盘事件?

我正在开发一个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

10
推荐指数
3
解决办法
9340
查看次数

Keydown哪个无法使用Chrome扩展程序

我一直在努力解决谷歌扩展的问题,而你一如既往是我最后的希望!:))

好吧,我想点击我的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)

javascript jquery google-chrome google-chrome-extension

5
推荐指数
1
解决办法
953
查看次数