1

次の問題が発生する理由を理解するのに苦労しています。

入力ボックスがあり、オートコンプリートボックスを添付したいと思います。

function input_set_autocomplete_to(obj)
{
    if( obj.type != "text" ) { return; }
    if( obj.getAttribute("rel") != "autocomplete" ) { return; }
    obj.setAttribute("autocomplete", "off");
    obj.setAttribute("uniqindex", Math.round(Math.random()*99999));
    obj.onfocus = function() {
        input_hide_autocompletes();
    };

これが関数の始まりです。ここでは問題ありません。次に、onkeydownイベントとonkeyupイベントをフックして、ユーザーが入力しているときにボックスを表示できるようにします。

    obj.onkeydown = function(e) {
        console.log('x');
    }
    obj.onkeyup = function (e) {
        console.log('z');
    }

ここまでは順調ですね。すべてがWindowsとLinuxの両方のすべてのブラウザ(IE、FF、Chrome、Safari)で機能し、キリル文字入力を使用している場合はLinuxのOperaを除いて、すべてのキーを押すとx、zが表示されます(例:сдфг)。onkeyupイベントは発生しません。

私が使用しているシステムは、Opera10.10を搭載したUbuntu9.04です。

PSこの質問を入力している間、ArchLinuxを搭載した別のマシンで、Opera 10.10を使用して試してみましたが、正常に動作しています。また、同僚は、Safariを搭載したMacOS X 10.6でも機能しないというメモを落としましたが、バージョンを特定するために彼に連絡することはできません。

4

1 に答える 1

1

quirksmodeによると、Operaキーアップ処理は壊れています。代わりに、Operaでキーを押す必要があります。

于 2010-05-11T15:33:01.887 に答える