-1

私は現在、グリースモンキースクリプトを開発中です。このスクリプトの一部では、ユーザー操作のない入力ボックスの変更を検出する必要があります。しばらくの間、mousemove や keyup/down などのいくつかのイベント トリガーを使用して、古い値と新しい値を比較し、それに応じて更新していました。何らかの理由で、これは私のシナリオでは失敗する可能性があります。

このシナリオは、ページのセクションが動的に変更され、現在アクセスされているセクションを反映するように入力ボックスが自動的に変更されるシステムです。

私は setInterval を試して変化を検出しようとしましたが、最近はより良い解決策があるに違いないと確信しています。

これは、ほとんどの場合うまくいくと思われる私が使用しているものの例ですが、より信頼性の高いソリューションが本当に必要です.

$(document).mousemove(function(event){
    if(savedId !== $('.only_class_element').val()){

ユーザーの操作なしで入力ボックスへの値の変更を検出する setInterval 以外の方法はありますか?

もちろん、これはdom readyで呼び出されます

4

1 に答える 1

1

通常、 などの<input>場合は、イベントを使用しchangeます。例えば:

$('.only_class_element').on ("change", function (zEvent) {
    // DO WHATEVER HERE.
} );


ただし、要素が実際には入力型ではない場合、または要素自体が AJAX を介して追加/削除/再作成されている場合は、間隔 (またはミューテーション オブザーバーを使用しますが、お勧めしません) を使用する必要があります。ところで、間隔は、フィルタリングされていない監視よりもはるかに侵入的/リソース集約的ではありませmousemoveん!

破壊的な AJAX の場合、次のようにwaitForKeyElements()を使用します。

// ==UserScript==
// @name     _Monitor Cheshire-cat element for changes
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant    GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
    introduced in GM 1.0.   It restores the sandbox.
*/
waitForKeyElements (".only_class_element", fireOnChangedValue);

function fireOnChangedValue (jNode) {
    var nodeVal     = $.trim (jNode.val () );
    var lastVal     = jNode.data ("lastVal")  ||  "";

    if (nodeVal != lastVal) {
       //  DO WHATEVER WITH nodeVal HERE.
    }

    jNode.data ("lastVal", lastVal);
    return true;
}
于 2013-05-30T09:30:46.670 に答える