Jquery自动完成功能无法正常工作

时间:2016-11-09 17:13:44

标签: javascript jquery html jquery-ui autocomplete

我正在使用jquery autocomplete。在我的情况下,我的页面上有多个自动填充文本框和隐藏字段。 e.g

<input  class='myclass' type='text'> </input>
<input class='.emp_num_hidden' type='hidden'> </input>
<input  class='myclass' type='text'> </input>
<input class='.emp_num_hidden' type='hidden'> </input>

依旧......

所以当我在隐藏字段上触发更改事件时,它会被多次提升 下面是我的代码:

$(".myclass").each(function() {

var $empName= $(this);
var $empNumber = $empName.next('input:hidden');
//things to do
//Setting variable e.g url...

 $empName.autocomplete(url,{

//code...

}).result(function(event,data,formatted)
{
 $empNumber.val(formatted).change();
});
});

在上面的代码中,$ empNumber包含隐藏字段,用于存储自动完成值,即在这种情况下 我们从自动填充中选择任何文本,然后选定的员工编号将存储在隐藏字段中。 基于这个隐藏的字段值,我想进行ajax调用,该调用将根据他的回复返回员工的完整详细信息 员工编号。 所以我写了hanldler来改变隐藏字段的事件,如下所示。

$(.emp_num_hidden).on('change',function (

)};

这里'emp_num_hidden'是隐藏字段的类。

请建议如何防止隐藏字段更改的多个事件。

1 个答案:

答案 0 :(得分:0)

这是使用$(this)对象完成的。由于change事件具有目标,因此它只会影响一个元素。正在对此元素this执行回调函数。例如:

$(".emp_num_hidden").on('change', function (e){
  alert($(this).val());
});

当隐藏字段发生变化时,将显示一个警告窗口,其中仅包含该隐藏字段的员工编号。您还会注意到您的代码有一些修复。

就个人而言,我会在您的对象上使用idclass属性。这为您的选择器提供了广泛的范围和狭窄的范围。

示例:

<强> HTML

<input class='myclass' type='text' id='entry-txt-1' />
<input class='emp_num_hidden' type='hidden' id='hide-txt-1' />
<input class='myclass' type='text' id='entry-txt-2' />
<input class='emp_num_hidden' type='hidden' id='hide-txt-2' />

<强>的jQuery

$(function(){
  var $empName, $empNumber;

  $(".myclass").each(function(key, el) {
    $empName= $(el);
    $empNumber = $empName.next("input[type='hidden']");
    // things to do
    // Setting variable e.g url...
    $empName.autocomplete(url, {
      //code...
    }).result(function(e, d, f){
      $empNumber.val(f).change();
    });
  });
  $(".emp_num_hidden").on('change', function(e){
    var empId = $(this).attr("id");
    var $employeeNumberField = $("#" + empId);
    // Do the needful...
  });
});

更进一步,您可能需要考虑使用数据属性。您可能还希望查看select事件以获取自动填充功能。类似的东西:

$(function(){
  $(".myclass").autocomplete({
    source: url,
    select: function(e, ui){
      $(this).val(ui.item.label);
      $(this).data("emp-number", ui.item.value);
      $.post("employeedata.php", { n: ui.item.value }, function(data){
        $("#empData").html(data);
      });
      return false;
    }
  });
});

这假定url返回具有labelvalue属性的数组对象。这会将员工编号作为data-emp-number属性添加到用户正在进行选择的字段中。 label是他们的员工姓名,value是他们的员工编号。您还可以使用此回调来显示基于员工编号的所有其他员工数据。

一个工作示例:https://jsfiddle.net/Twisty/zmevd0r0/