jquery在具有相同类名的多个字段上通过一个键自动完成

时间:2014-03-15 20:18:39

标签: javascript php jquery html jquery-autocomplete

我使用jquery.autocomplete按代码搜索项目并自动完成代码并更新以前名为name的表单输入字段:

<tr>
<td><input type="text" name="Name[]" class="nameautoc" value="badname1" /></td>
<td><input type="text" name="Code[]" class="codeautoc" value="1234" /></td>
</tr>
<tr>
<td><input type="text" name="Name[]" class="nameautoc" value="ok_name" /></td>
<td><input type="text" name="Code[]" class="codeautoc" value="12345" /></td>
</tr>
<tr>
<td><input type="text" name="Name[]" class="nameautoc" value="badname2" /></td>
<td><input type="text" name="Code[]" class="codeautoc" value="34567" /></td>
</tr>

对于每个代码输入字段,代码本身的自动填充功能正常。 当添加JS代码以更新匹配的Name字段时,它会更新整个表单Name字段,而不是之前的/或当前正在处理的字段。

如何实现只有当前输入名称字段由我选择的代码自动完成,或者我应该使用JS代码参考我使用的表格?

JS代码:

    $(document).ready(function($) { 
        $(".codeautoc").autocomplete({
            source:"codenName.php",
            minLength:2,
            select:function(event,ui){
                var item=ui.item;
                if(item){
                    $(".nameautoc").val(item.name);
                }
            }
    });

相关的PHP代码:

    while($row = mysql_fetch_array($fetch,MYSQL_ASSOC)) {
        $return_row['label'] = $row['code'];
        $return_row['value'] = $row['code'];
        $return_row['name'] = $row['name'];
        array_push($return_arr, $return_row);
    }

希望我提供了所需的信息。

谢谢!

1 个答案:

答案 0 :(得分:1)

您的select回调应如下所示:

  select:function(event,ui){
      var item=ui.item;
      if(item){
         $(".nameautoc", $(this).parents('tr')).val(item.name);
      }
  }

通过在jquery选择器中添加$(this).parents('tr')作为上下文(有关详细信息,请参阅JQuery docs),确保只有父tr元素的匹配子元素是已更新,而不是文档中包含类nameautoc的所有元素。

或者,您也可以使用$(this).parent().parent()遍历tr,而不是使用$(this).parents('tr')Here's the working fiddle.