0

私はフォームを持っています

<form action="_orders.php" method="get" autocomplete="off" name="cerca_db">
 <tr>
  <td class="main" width="170">Ricerca Cliente</td>
  <td><input type="hidden" name="action" value="check_sped_data" /></td>
  <td class="main"><p class="ciao" id="auto"><input id="searchField" name="searchField" type="text" onKeyPress="return disableEnterKey(event)"></p></td>
  <td width="25"></td>
  <td class="main"><input type="submit" value="Cerca"></td>
 </tr>
</form>

これは、mysql db テーブルを検索するために使用されます。ボタンをクリックすると、見つかったデータベース レコードに基づいて、別のフォームのすべてのフィールドがオートコンプリートされます。

今私の問題は、大文字と小文字が区別されるため、オートコンプリート部分にあります。私はすでに小文字でデータを抽出することができましたが、db レコードと一致するように Java 関数に送信する前に、入力 searchFieldを小文字に変換することはできません。

私は実際に javascipt 関数にオートコンプリート機能があることを発見しました。私は自分のニーズに合わせてhtmlとphpの部分を変更しただけで、Java自体には何も触れていません。

したがって、フォームは次のように入力をjavascriptに送信します

$(function(){
  setAutoComplete("searchField", "results", "autocomplete.php?part=");
});

automcomplete.php は、入力に基づいて db からデータを抽出し、入力の下に表示する配列に配置する必要があります。

$result = mysql_query("SELECT a.customers_firstname, a.customers_lastname, a.customers_id, b.entry_company FROM customers a left join address_book b on a.customers_id = b.customers_id GROUP BY b.entry_cf");
while ($row = mysql_fetch_assoc($result)) 
{
  $ricerca = array(strtolower($row['customers_firstname']) => strtolower($row['customers_lastname']));

  foreach ($ricerca as $key=>$data)
  {
    $edata[]=$data . ' ' . $key;
    $edata[].=$key .' ' . $data;
  } 

  $edata[].=(strtolower($row['entry_company']));
}  

これで、名前と会社の配列がすべて小文字になり、フィールドに入力されたものと一致するようになりました。入力が小文字の場合はすべて正常に機能しますが、入力が大文字の場合はまったく一致しません。

これに関する解決策はありますか、または大文字と小文字を区別する問題を解決する方法はありますか?

編集: これは、データが db から Java スクリプトにプッシュされる方法です:

if(isset($_GET['part']) and $_GET['part'] != '')
{
         $results = array();

     $count = 0;
     foreach($extracted_data as $edata)
     {
         if( strpos($edata, $_GET['part']) === 0 )
            {
                 $results[] = $edata;
                 $count++;
                 if ($count == 10) break;
             }
     }
     echo json_encode($results);
}
4

3 に答える 3

1

情報を提出または送信する前に、すべての文字を小文字に変換する JavaScript 関数を呼び出します。要素の名前が「YourInputID」の場合、例:

function convert()
{
    var a = document.getElementById("YourInputID").value;
    a = a.toString().toLowerCase();
    document.getElementById("YourInputID").value = a;
}

ここでjavascript 文字列関数リファレンスstr.toLowerCase() を使用して、文字列文字を小文字に変換できます。

于 2012-11-10T17:16:30.737 に答える
1

これで正しい軌道に乗るはずです:

document.getElementById('foo').addEventListener('keypress', function(e) {
    e.preventDefault();
    this.value += String.fromCharCode(e.keyCode).toLowerCase(); 
});​

デモ: http://jsfiddle.net/m66c2/

于 2012-11-10T17:18:31.760 に答える
0

OK、まず、PHP に問題が発生します。あなたが言うところ:

$edata[]=$data . ' ' . $key;
$edata[].=$key .' ' . $data;

これは、配列内の 2 つの異なる項目にアクセスすることになりますが、これは望ましくないと思います。これは、メソッドを使用するための構文$array[]が (一種の) 短いためarray_push()です。アクセスされるたびに、配列に追加されます。構文は、空の配列項目に効果的に連結できない$array[].=$valueのと同じことを意味します。$array[]=$value

$edata_this='';
foreach ($ricerca as $key=>$data)
{
  $edata_this=$data . ' ' . $key;
  $edata_this.=$key .' ' . $data;
} 

$edata_this.=(strtolower($row['entry_company']));
$edata[]=$edata_this;

ここで、問題が JavaScript 項目を小文字に変換するだけの場合は、String.toLowerCase()メソッドを使用してください。

ただし、実際にどの部分を変更または比較する必要があるのか​​ 、質問では完全にはわかりません。そのため、さらに説明が役立つ場合があります。

さらに、onKeypress などのインライン JavaScript の使用は常に避ける必要があります。jQuery を使用しているので、その$().keypress()バインディングを使用してみてください。

$('input[name="YOUR_NAME"]').keypress(function(){
  // your actions go here
});
于 2012-11-10T17:20:33.907 に答える