jquery keyup不能从代码中运行,但可以从chrome.console中运行

时间:2012-04-13 16:26:06

标签: javascript jquery google-chrome-extension

我制作了一个谷歌浏览器插件

任务(在sportingbet.com上):

  • 投注价格
  • 提交购物篮

问题:

  • $(".userItems input.amount").val(110); - >工作(但需要触发密钥)
  • $(".userItems input.amount").keyup(); - >不起作用,但当我在控制台中键入它时,它可以工作。

区别是什么?

2 个答案:

答案 0 :(得分:1)

这很有意思,但一个角度是创建一个模拟键事件:

function simulateKeyEvent() {
  var event = document.createEvent("KeyboardEvent");
  event.initKeyEvent(                                                                                      
             "keyup",
              true /*let event bubble up*/,                                                      
              true /*can the event be canceled?*/, 
              null, 
              false /*ctrl key held down?*/,
              false /*alt?*/,
              false /*shift?*/,
              false /*meta (cmd)?*/,
               9 /*keyCode*/,                                                      
               0);

  var cb = document.getElementById("checkbox"); 
  var canceled = !cb.dispatchEvent(event);
  if(canceled) {
    // A handler called preventDefault
    alert("canceled");
  } else {
    // None of the handlers called preventDefault
    alert("not canceled");
  }
}

现在,要真正解决您的问题,您可能希望在页面的javascript中运行扩展隔离世界之外的代码。要做到这一点,我有一个漂亮的功能:

function runInPage(code) {
  var script = document.createElement('script');
  script.innerHTML = code;
  document.documentElement.insertBefore(script);
}

然后尝试runInPage('$(".userItems input.amount").keyup();');

但是你可能需要在此之前加载jQuery,所以:

var jq = document.createElement('script');
jq.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js';
document.documentElement.appendChild(jq);

答案 1 :(得分:0)

不带参数的

.keyup()只会触发对该输入的keyup事件的任何回调附加

.val(110)假设要做的就是设置输入元素的值,这就是触发事件的原因。

.val(110).keyup()将同时执行这两项操作