我制作了一个谷歌浏览器插件
任务(在sportingbet.com上):
问题:
$(".userItems input.amount").val(110);
- >工作(但需要触发密钥)$(".userItems input.amount").keyup();
- >不起作用,但当我在控制台中键入它时,它可以工作。区别是什么?
答案 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()将同时执行这两项操作