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

标签 javascript jquery html jquery-ui autocomplete

我正在使用 jquery 自动完成。在我的例子中,我的页面上有多个自动完成文本框和隐藏字段。 例如

<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 调用,它将根据员工的信息返回员工的完整详细信息 员工编号。 所以我编写了处理程序来更改隐藏字段的事件,如下所示。

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

)};

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

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

最佳答案

这是使用 $(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/

关于javascript - Jquery 自动完成功能无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40512506/

相关文章:

javascript - 返回较大字符串中特定字符串之前第一次出现的时间正则表达式

javascript - 使用 javascript_include_tag :all 加载订单

javascript - 就像用 jQuery 浏览文件一样

javascript - 如何从存储排序的jquery tablesorter获取cookie值?

javascript - 如果N秒内没有点击,如何隐藏图像?

javascript - 如何使用 Node.js createReadStream 和 createWriteStream 写入多个文件

javascript - Jquery 移动秒表

javascript - 减少或增加数量时显示每一行的价格

jquery - 悬停在 child 身上时如何禁用 parent 悬停

javascript - jQuery 返回选定选项属性值