6

IE の Script.aculo.us Autocompleter コントロールの問題に苦しんでいます (IE6 & 7 で試しました)。ページが読み込まれた後、最初の文字がテキスト ボックスに入力されると、候補が表示されません。その最初の失敗の後、コントロールは正常に機能します。

提案データがサーバーから正しく返されることを確認しました。提案が表示されると予想される瞬間に、ページ上の他の相対的に配置された要素が位置からずれるため、問題は提案要素の配置に関係しているようです。

誰かがそのような問題を聞いたことがありますか、またはそれを修正する方法について何か提案がありますか?

編集: Chris に応えて、partialChars パラメーターを 1 に設定し、Firefox、Safari、Opera、および Chrome の最新バージョンである、試した他のすべてのブラウザーでコントロールが機能するようにしました。最初にはっきりさせておくべきだったのかもしれません。ありがとう。

4

6 に答える 6

5

私は確かにまったく同じ問題を抱えています。この問題は IE でのみ発生します (8.0 ベータ版でも発生します)。

私が試した Firefox と Chrome の両方で、まったく問題はありません。

他の人によると、これは HTML ファイルの DOCTYPE 宣言によるものです。ここをチェックしてください:http://prototype.lighthouseapp.com/projects/8887/tickets/32-ajax-autocomplete-in-ie-with-doctype

このバグは Ruby 開発者ボード ( http://dev.rubyonrails.org/ticket/11051 ) でもチケットを取得しています。

どちらのリンクにも、問題を解決するための解決策があります。

うまくいけば、プロトタイプ/スクリプトアキュラスの次のバージョンでバグが修正されるでしょう:)

于 2009-01-22T15:17:50.217 に答える
3

ハックしてくれてありがとう。私はこれを自分で使用しましたが、次のようにして、Ajax.Autocompleter が使用されている場合にのみ呼び出されるように変更しました。

function positionAuto(element, entry) {
    setTimeout( function() {
      Element.clonePosition('choices_div', 'text_element', {
      'setWidth': false,
      'setHeight': false,
      'offsetTop': $('text_element').offsetHeight
    } );
  }, 300);
  return entry;
}

new Ajax.Autocompleter('text_element', 'choices_div', [url to web service], {
  paramName: 'fulltext',
  minChars: 2,
  callback: positionAuto, // See above
  [etc...]

コールバックは実際のリクエストが行われる直前に呼び出されるため、その瞬間に DIV を配置するのが最も理にかなっています。また、ウィンドウのサイズを変更したりスクロールしたりしても、DIV が正しく配置されるようにします。腹立たしいのは、それを一貫して機能させるために、「setTimeout()」でラップする必要があったことです。さまざまなタイミング設定をあまり試していませんが、動作するタイムアウトしきい値が低い場合は知りたいです.

IE 8 & 7 でテスト済みで、非常にうまく動作します。また、他の実際のブラウザでも動作します。これにより、これに対処するときに一部のコーダーの頭痛が解消されることを願っています。

于 2009-06-04T11:09:45.503 に答える
2

問題はIEだけですか、それともすべてのブラウザにありますか?最初の文字を無視することは、実際にはオートコンプリートのデフォルトです。Controls.jsには、Autocompleter.Localというクラスがあり、partialCharsというフィールドがデフォルトで2になっています。このフィールドのドキュメントには次のように書かれています。

// --partialChars-部分一致をトリガーする前に//入力する文字数( //一致を実行するために必要な文字数を//
定義するminCharsとは異なり ます)。デフォルトは2です。

于 2008-09-20T18:17:20.387 に答える
2

IE8/IE9 でこの問題にかなり苦労した後、CSS ハックを使用することになりました。ここでの方法は、絶対配置コンテナ内で相対位置を強制することです。選択肢を他の要素の上に浮かせるには、追加のコンテナが必要です。

div.acwrap {
  position: absolute;
  height: 40px;
}

div.autocomplete {
  position: relative !important;
  top: -5px  !important;
  left: 0px !important;
  width:250px;
  margin:0;
  padding:0;
}

私の HTML コードでは、次のようにクラスを使用しました。

<div class="acwrap">
 <div id="autocomplete_choices" class="autocomplete">
 </div>
</div>

アイデアはここで生まれました: Scriptaculous / Prototype IE 8 Autocomplete消え問題

于 2011-08-25T17:36:25.987 に答える
1

この問題の正確な原因はまだわかりませんが、回避するためのハックを思いついた. アイデアは、ページがロードされたときに最初の文字エントリで通常は失敗を引き起こす処理を実行して、邪魔にならないようにすることです。

new Ajax.Autocompleter(textInputId, suggestionsHolderId, suggestionsUrl, params);

//Hack
Event.observe(window, 'load', function()
{
    try
    {
        Position.clone($(textInputId), $(suggestionsHolderId),
            { setHeight: false, offsetTop: $(textInputId).offsetHeight});
    }
    catch(e){}
});
于 2008-09-23T12:09:19.887 に答える
1

これは既知のバグで、機能するパッチが含まれていますが、まだ含まれていません。ここで詳細を読むことができます: https://prototype.lighthouseapp.com/projects/8886-prototype/tickets/618-getoffsetparent-returns-body-for-new-hidden-elements-in-ie8-final#ticket- 618-9

于 2010-03-03T10:52:31.190 に答える