1

リスト項目をクリックしたとき以外にトリガーしたい入力に変更イベントがあります。基本的には、変更されたときにこのフィールドをチェックする関数を呼び出しますが、選択した入力のすぐ下に順序付けられていないリストを追加するオートコンプリート スクリプトもあり、項目をクリックして入力フィールドに入力すると変更がトリガーされます(基本的に、新しい値が追加される前にトリガーされます)。JavaScriptコードは次のとおりです。

document.observe('dom:loaded',function() { 
    new Ajax.Autocompleter("search_input", "found_input", "someurl.jsp", {
        afterUpdateElement: updateSelectedItem,
        minChars: 2
    });
    if ($('search_input') != undefined) {
        $('search_input').observe('change', function(e, el) {
            if (e.explicitOriginalTarget.up(1) != undefined && e.explicitOriginalTarget.up(1).id != "found_input") {
                checkFunction(this.value);
            }
        });
    }
});

Mozilla ブラウザで動作するので、そこに explicitOriginalTarget を追加しましたが、これはクロス ブラウザ ソリューションではありません。また、順序付けられていないリスト項目をクリックすると追加される変数を追加しようとしましたが、DOM では search_input フィールドの後にトリガーされます。

助けてくれてありがとう。

編集:

ここでちょっとした例を見ることができます: http://jsfiddle.net/DfMYE/5/ 「test」と入力し始めると、2 つのオプションのドロップダウンが表示されます。いずれかをクリックすると、change イベントと select イベントがトリガーされます。選択リストをクリックすると、変更イベントを停止したいと思います。

4

1 に答える 1

0

これが私の確かにハックな解決策です: http://jsfiddle.net/kkFsJ/1/

何が起こっているのかというと、オートコンプリートオプションをクリックすると、入力フィールドがぼやけて、入力した値がコミットされ、変更イベントがフィールドにディスパッチされます。これは、オートコンプリートオプションをクリックして(マウスアップが必要)、その機能をトリガーして入力コンテンツを選択したものに置き換えることができるようになる前のすべてです。これが問題の根本です。

私が完全に理解していないのは、オートコンプリートを選択した後、別の変更イベントが呼び出されない理由です(少なくともSafariでは)。プログラムで入力の値を変更しても、変更イベントはトリガーされないのではないかと思います。それが事実かどうかはおそらく知っているはずですが、テストする必要があります。何か案は?

つまり、私が行ったことは、Autocompleter.Localクラスをサブクラス化し、onClick各liのmousedownイベントにコールバックを割り当てることでした。これは、フォームのぼかしイベントの前にトリガーされるようですonClick(したがって、変更が発生します)。次に、入力フィールドで変更イベントを手動で発生させます。

1回のオートコンプリート選択でコールバックが複数回呼び出されないchangingように、フラグを設定する必要がありました。searchHandlerこれはFirefoxで起こっていました。このコールバックの実際の動作を延期してイベントを落ち着かせてから、changingフラグをオフに戻します。これは最も大きな部分です、ごめんなさい。

オートコンプリートオプションを選択すると、値が入力フィールドに元々あったものと異なるかどうかに関係なく、変更イベントが常に発生することに注意してください。これを回避するには、必要に応じて処理できるオートコンプリートコードをいじくり回す必要があります。また、私はこれをMacのFFとSafariでのみテストしたので、これが本番環境に移行する場合は、適切にテストして調整します。

うまくいけば、これがうまくいくか、少なくともいくつかのアイデアが得られます。あなたや他の誰かがこの問題について別の見方をしているなら(オートコンプリート機能を書き直す以外に)、私は聞いてみたいです。

于 2012-07-11T04:26:00.290 に答える