1

グーグルクロームのプラグインを作りました

タスク (sportingbet.com):

  • 賭け金を入れる
  • バスケットを提出する

問題:

  • $(".userItems input.amount").val(110);-> 動作します (ただし、キーアップをトリガーする必要があります)
  • $(".userItems input.amount").keyup();-> 機能しませんが、コンソールにこれを入力すると機能します。

違いは何ですか?

4

2 に答える 2

1

これはたいてい興味深いものですが、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 に答える