1

我做了一个谷歌浏览器插件

任务(在sportsbet.com 上):

  • 投注价格
  • 提交篮子

问题:

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

有什么不同?

4

2 回答 2

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);
于 2012-04-15T18:44:53.517 回答
0

.keyup() 不带参数只会触发任何回调附加到该输入的 keyup 事件

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

.val(110).keyup() 两者都可以

于 2012-04-13T16:29:30.840 回答