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 数据库表中进行搜索。单击按钮后,它会根据刚刚找到的数据库记录自动完成另一个表单的所有字段。

现在我的问题是自动完成部分,因为区分大小写。我已经设法以小写形式提取数据,但是在发送到 java 函数以匹配 db 记录之前,我无法将输入 searchField转换为小写。

我实际上发现 javascipt 函数具有自动完成功能。我只更改了 html 和 php 部分以满足我的需要,我没有触及 java 本身的任何内容,因为我完全是一个菜鸟。

所以现在表单像这样将输入发送到javascript

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

automcomplete.php 需要根据输入从数据库中提取数据并放入数组中以显示在输入下:

$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

这应该让你走上正确的轨道:

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 回答
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 回答
0

好的,首先你的 PHP 会有一些问题。你说的地方:

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

这将访问数组中的两个不同项目,我假设您不想这样做。那是因为$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()方法。

但是,对于您实际上需要更改或进行比较的问题,我并不完全确定,因此更多的解释可能会有用。

此外,您应该始终避免使用内联 JavaScript,例如 onKeypress;当您使用 jQuery 时,请尝试使用它的$().keypress()绑定:

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