2011-02-05 2 views
0

私は可能なタグワードのリストを持っており、それらをクリック可能な単語としてテキスト入力フィールドの下に表示したいと考えています。クリックすると、これらの単語は下から消えます(この機能がない場合は回答を受け入れます)、テキスト入力フィールドに再び表示されます。おいしいライクなタグを複製するには?

ボーナス:追加されたタグを入力フィールド(la Delicious)から削除できますが、上記の機能と同じくらい重要ではありません。

答えて

2

誤解質問に対する私の回答:

のでbasciallyあなたは、タグ入力のためのオートコンプリート機能をしたいですか? AJAXのクラシックケース! :)

まず、ユーザーが既に入力した文字と一致するすべてのタグを返すサーバーサイドスクリプトが必要です。このスクリプトは、例えば、すべてのタグをMySQLデータベースに照会します。パフォーマンスのヒント:tag -fieldがインデックスであることを確認してください。そうすれば、MySQLはタグをより早く見つけ出します。サーバーの応答は、可能なタグのJSONまたはXMLリストである可能性があります。

次に、すべてのキーストロークでこのサーバーサイドスクリプトを呼び出すJavaScriptが必要になります(多少の遅延を追加して、サーバーが要求によって無効になることはないかもしれません)。 JavaScriptはサーバーからJSONまたはXMLを解析し、HTMLとして出力します。

私は誰もあなたのために(少なくとも無料ではありません)コード化しますが、これはかなり一般的な作業であり、Googleも確かに役に立ちますので、これを行うことができると確信しています。


編集:ところで、あなたは私の名前の誰も知りませんでしたか?私は実際にあなたのためにいくつかのサンプルコードを書いています。

ajax.php:

// Add Databse-connection stuff right here 

$q = strtolower ($_GET['q']); 
if (empty ($q)) 
    die (''); 

// Select all the tags that begin with the already-typed letters ($_GET["q"]) 
$query = "SELECT `tag` FROM `tags` WHERE `tag` LIKE ".mysql_real_escape_string($q)."_% LIMIT 10"; 
$did = mysql_query ($query); 
if (!$did) 
    die (''); 

$tags = array(); 
while ($tag = mysql_fetch_row($result)) { 
    $tags[] = $tag[0]; 
} 

// Yes, I actually didn't use any JSON or XML here, just a comma-seperated list 
$ret = implode (",", $tags); 

echo $ret; 

autocomplete.js:

var tags_input = document.getElementById("tags"); 
var timeout = 500; // If the user doesn't type for this amount of miliseconds, the AJAX request gets sent. To protect the server a little bit. :) 

var xhr; 
var do_ajax = false; // Gets true after 500 ms of not typing 

var tags = []; 

tags_input.onkeyup = function (e) { 
    if (!e) e = window.event; 

    do_ajax = false; 

    window.setTimeout (function() { 
     do_ajax = true; 
     ajax_request(); 
    }, 500); 

}; 

function ajax_request() { 
    var q = tags_input.value; 
    if (q == '') 
     return; 
    xhr = new XMLHttpRequest; 
    xhr.open ('GET', 'ajax.php?q='+q, true); 
    xhr.send (null); 
    xhr.onreadystatechange = function() { 
     if (xhr.readyState == 4) { 
      if (xhr.responseText != '') { 
       tags = xhr.responseText.split (','); 
       show_autocompletions(); 
      } 
     } 
    }; 
} 

function show_autocompletions() { 
    alert (tags.join (', ')); // you might want to generate some real HTML here 
} 

表構造この例:テーブルのはtagと呼ばれ、それが一意のインデックスである唯一のフィールドtagを含み、 。 tagにカンマが含まれていないことを確認してください。

+1

andre、あなたが私を助けてくれた後、あなたにこれをするのは嫌いです - 私はオートコンプリートを求めていませんでした。私は入力フィールドの下にクリック可能としてリストしたい10個のタグのプリセットリストを持っています。ユーザーがタグをクリックすると、タグは消えて – dougvk

+0

の上のテキストフィールドに再表示されます。まあ、私のせいです。私はかなり過労でした。 :D私はまだ他の誰かがそれが有用であると思っても、私がそこに私の例を残すと思う。 – anroesti

関連する問題