我正在使用与 select2 插件绑定的输入框滚动我自己的 typeahead 实现。用户将输入手动电子邮件地址,然后使用 onchange 事件针对电子邮件正则表达式进行验证,或者他们可以开始输入已绑定到其帐户的收件人的 DisplayName。该列表将通过对控制器的 ajax 调用获取,然后控制器调用服务并检索数据,然后通过动态创建的列表项。如果用户单击或点击显示的其中一个 DisplayName,则该收件人将被添加到所选收件人的列表中,并从那时起显示在 select2 中。
typeahead 和 ajax 调用工作正常,数据返回并正确显示;但是,我似乎无法将从初始 ajax 调用返回的对象作为参数传递给函数。如果我尝试传递原始值,我的'unexpected identifier'
控制台调试器中会出现错误;如果我尝试传递JSON.stringify(value)
,我'unexpected token ;.'
总是可以通过传递接收者的 ID 属性来回退(这工作正常,当我尝试传递我遇到困难的复杂对象时)并再次重建对象,但是它显然最好避免这种情况并避免进行另一个服务调用。提前致谢。
这是脚本:
$(document).ready(function () {
$("#selectedRecipientList").select2({ tags: null, tokenSeparators: [",", " "] });
$('.select2-input').keyup(function (e) {
var currentString = $('.select2-input').val();
$.ajax({
dataType: 'json',
url: '@Url.Action("RecipientTypeAhead", "RecipientManager")',
data: { query: currentString },
success: (function (data) {
$('#TypeAheadRecipientsList').empty();
$(data).each(function (index, value) {
$('#TypeAheadRecipientsList').append('<li onclick="AddRecipientFromPicker(' + JSON.stringify(value) + ')">' + value.DisplayName + '</li>');
});
})
});
});
});
function AddRecipientFromPicker(someData){} //only ever reaches here if int primitive is passed in
下面是对象在 ajax 方法中返回后的外观示例: {"AccountName":"abc","DisplayName":"abc","Email":"abc@test.net","Id":94654}