2

PHP と jQuery を使用して、入力がサーバー上のファイル パスを取得する必要があるアプリケーションを開発しています。パスは自明ではなく、多くのエントリが存在する可能性があるため、bash のように動作するオートコンプリート フィールド、つまり現在のレベルの候補リスト ディレクトリを実装したいと考えています。

これらのディレクトリが利用可能であるとします

    /a/001
    /a/002
    /a/003
    /b/020
    /b/021
    /c/002

まず、オートコンプリートで a、b、c が提案されます。次に、a/ を入力すると、001、002、003 が表示されます ...

サーバーは利用可能なすべてのディレクトリのツリーを構築し、それをjsオブジェクトとして記述し、オートコンプリート機能は入力を解析し、スラッシュ/でトークン化し、対応するノードで利用可能なサブディレクトリを見つける必要があると思います.現在のパスに追加します。


アップデート

jQuery Autocomplete w/ multiple valuesを使用してほとんどそこにいますが、その動作が好きではありません。bashのオートコンプリートと同じように、検索アクションが利用可能なものから次のあいまいさまでテキストを埋めることを望みます。

ここに私が今持っているものがありますパスビンのリンク

4

2 に答える 2

3

ついに想像通りに手に入れました。サーバーは、ソース関数によって動的に解析され、2つの入力フィールドを使用してタブ補完の提案を入力するjsonツリーを構築します。

jsfiddleに実用的な例を載せる

function acSource(request, response) {
  var path = split(request.term);
  var depth = path.length;
  var node = paths;
  var avail = new Array();

  // descent into the path tree to get a list of suggestions
  for (var n = 1; n < depth && typeof node !== "undefined"; n++) {
    var cur = path[n - 1];
    node = node[cur];
  }

  // build a regex with the last directory entry being typed
  var last = path.pop();
  var re = new RegExp("^" + last + ".*", "i");

  // filter suggestions by matching with the regex
  for (var k in node) {
    if (k.match(re)) avail.push(k);
  }

  // build a new suggestion
  path.push(sharedStart(avail));
  if (avail.length == 1) path.push("");

  // set suggestion for autocomplete
  var sugg = $(this.element).siblings(".pathSuggest");
  $(sugg).val(path.join("/"));

  // delegate back to autocomplete, but extract the last term
  response($.ui.autocomplete.filter(avail, last));
}
于 2013-01-09T20:36:53.937 に答える