我正在使用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'是隐藏字段的类。
请建议如何防止隐藏字段更改的多个事件。
答案 0 :(得分:0)
这是使用$(this)
对象完成的。由于change
事件具有目标,因此它只会影响一个元素。正在对此元素this
执行回调函数。例如:
$(".emp_num_hidden").on('change', function (e){
alert($(this).val());
});
当隐藏字段发生变化时,将显示一个警告窗口,其中仅包含该隐藏字段的员工编号。您还会注意到您的代码有一些修复。
就个人而言,我会在您的对象上使用id
和class
属性。这为您的选择器提供了广泛的范围和狭窄的范围。
示例:
<强> 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
返回具有label
和value
属性的数组对象。这会将员工编号作为data-emp-number
属性添加到用户正在进行选择的字段中。 label
是他们的员工姓名,value
是他们的员工编号。您还可以使用此回调来显示基于员工编号的所有其他员工数据。