使用jquery注册动态控件以进行自动完成
-
06-07-2019 - |
题
我在按钮点击时使用jquery动态创建文本框。
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<div id="lblCustName">
</div>
</td>
<td>
<div id="lblRemove">
</div>
</td>
</tr>
<tr>
<td colspan="2">
<input type="button" value="Add" id="AddRow" />
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Submit" id="SaveCustomers" />
</td>
</tr>
</table>
<script type="text/javascript" language="javascript">
$(document).ready(function() {
//validate post form
$("#CustomersForm").validate({ ignore: ":not(:visible)" });
//Initialize the dynamic id
_DynId = 1;
//Click Event for Customers
$('#AddRow').click(function(e) {
$('#lblCustName').append('<div id="lblCustName' + _DynId + '" style="height:20px;padding-left:10px;">' + '<input type="text" name="CustName" id="CustName' + _DynId + '" class="required" value="" title="*" />');
$('#lblRemove').append('<div id="lblRemove' + _DynId + '" style="height:20px;padding-left:10px;">' + '<img src="../../Content/Images/delete_icon.gif" onclick=Remove("' + _DynId + '"); title="Remove" id="iRemove' + _DynId + '"></img>');
_DynId += 1;
});
</script>
我正在尝试动态地为客户添加文本框。 这是为报表处理添加客户的功能的示例html,... 我需要为文本框提供自动完成选项。
我使用了以下脚本:
$.getJSON("/User/GetAllCustomers/?t=" + new Date(), {},
function(data) {
if (data != null) {
$("input:text[name=CustName]").autocomplete(data, { mustMatch: false, matchContains: 4, max: 50,
formatItem: function(row) {
if (row.CustomerName!= "") {
return row.CustomerName;
}
},
formatResult: function(row) {
return row.CustomerName;
}
}).result(function(e, row) {
//do something
});
}
});
自动完成功能不适用于动态添加的控件。
我正在尝试将动态添加的控件注册到表单,以便自动完成功能适用于动态添加的控件
解决方案
问题是当你绑定那个自动完成时,它绑定到运行该函数时与选择器匹配的字段。如果您稍后添加的内容也匹配,则不会自动绑定。
对于基本的jQuery事件,有一个 Live 绑定,可让您自动执行此操作,但自动完成不会通过这个 - 基本上你唯一的选择是每次添加一个新的文本字段时绑定一个新的自动完成
EG:添加到AddRow函数:
$("#lblCustName" + _DynId + " input[name=CustName]").autocomplete(...);
(显然用你想要的参数代替......)
您可能希望将从Web服务中撤回的数据对象放在全局变量中以支持这一点,并且可能与自动完成选项相同(只是为了避免代码重复)。
不隶属于 StackOverflow