我做了一个谷歌浏览器插件
任务(在sportsbet.com 上):
- 投注价格
- 提交篮子
问题:
$(".userItems input.amount").val(110);
-> 有效(但需要触发 keyup)$(".userItems input.amount").keyup();
-> 不起作用,但是当我在控制台中键入它时,它起作用了。
有什么不同?
我做了一个谷歌浏览器插件
任务(在sportsbet.com 上):
问题:
$(".userItems input.amount").val(110);
-> 有效(但需要触发 keyup)$(".userItems input.amount").keyup();
-> 不起作用,但是当我在控制台中键入它时,它起作用了。有什么不同?
这很有趣,但一个角度是创建一个模拟的关键事件:
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);
.keyup() 不带参数只会触发任何回调附加到该输入的 keyup 事件
.val(110) 所要做的就是设置输入元素的值,这就是为什么不触发事件的原因。
.val(110).keyup() 两者都可以