我迫切需要JavaScript专家的帮助。我花了最近7个小时尝试了数百种代码组合,以获得基本的标记选择输入字段,以便与库x-editable
和select2
一起使用。
我正在构建一个项目管理应用程序,它将在弹出窗口模式Div中显示项目任务数据。在任务模式中,所有任务字段都可以使用AJAX使用内嵌编辑功能进行编辑。
我正在使用:
X-Editable
- http://vitalets.github.io/x-editable/ Select2
- https://select2.github.io/ MockAjax
库。 https://github.com/jakerella/jquery-mockjax 我已经设置了一个基本的JSFiddle演示来试验这个StackOverflow问题。我没有来自我的实际应用程序的数千行代码,但是我确实将大部分正在使用的第三部分库包含在页面中。原因是要确保它们都不会干扰结果。
JSFiddle演示: http://jsfiddle.net/jasondavis/Lusbqfhs/
目标:
X-editable
和Select2
,以允许用户为项目任务选择并输入标记。Tag
条记录,这些记录将返回Tag ID number
和Tag Name
的JSON响应,并使用此数据填充Selection2
输入字段以允许用户选择多个标签。问题:
现在,我在过去7小时内尝试了数百种选项和代码组合。我似乎无法使用这个基本功能,而且我发现的大部分示例似乎都不再正常工作了!
在此示例底部的库x-editable
http://vitalets.github.io/x-editable/demo-plain.html?c=inline的此演示页面上,其中显示 Select2(标记模式),该功能是我需要的!我只是需要它从AJAX请求加载可用的标签,并且所有文档声称它可以完全没有问题地执行此操作!
这是X-Editable
字段的Select2
文档部分 - http://vitalets.github.io/x-editable/docs.html#select2
它还链接到Select2
文档,声称可以设置和使用Select2中的所有选项 - https://select2.github.io/options.html
我使用MockAjax
库来模拟JSFiddle等页面中的AJAX响应以进行测试。在我的JSFiddle演示中http://jsfiddle.net/jasondavis/Lusbqfhs/我设置了2个MockAjax响应....
$.mockjax({
url: '/getTaskTags',
responseTime: 400,
response: function(settings) {
this.responseText = [
{id: 1, text: 'user1'},
{id: 2, text: 'user2'},
{id: 3, text: 'user3'},
{id: 4, text: 'user4'},
{id: 5, text: 'user5'},
{id: 6, text: 'user6'}
];
}
});
$.mockjax({
url: '/getTaskTagById',
responseTime: 400,
response: function(settings) {
this.responseText = [
{id: 1, text: 'user1'},
{id: 2, text: 'user2'},
{id: 3, text: 'user3'},
{id: 4, text: 'user4'},
{id: 5, text: 'user5'},
{id: 6, text: 'user6'}
];
}
});
他们都应该为我的选择列表返回一个Mock JSON字符串,以填充。
以下是我的演示代码......
$(function(){
//remote source (advanced)
$('#task-tags').editable({
mode: 'inline',
select2: {
width: '192px',
placeholder: 'Select Country',
allowClear: true,
//minimumInputLength: 1,
id: function (item) {
return item.CountryId;
},
// Get list of Tags from AJAX request
ajax: {
url: '/getTaskTags',
type: 'post',
dataType: 'json',
data: function (term, page) {
return { query: term };
},
results: function (data, page) {
return { results: data };
}
},
formatResult: function (item) {
return item.TagName;
},
formatSelection: function (item) {
return item.TagName;
},
initSelection: function (element, callback) {
return $.get('/getTaskTagById', {
query: element.val()
}, function (data) {
callback(data);
});
}
}
});
});
现在在演示中,当您单击该字段以选择标记时,它只是保持“加载”并且永远不会得到结果。看看控制台,似乎我的MockAjax请求不起作用,但是第二个请求正在工作,所以我不确定我的AJAX请求有什么问题?
如果有人可以帮助我实现这一目标,我真的可以帮助我。我会非常感激,我整晚都没有睡觉,甚至没有更接近工作的解决方案!请帮帮我!
谢谢
答案 0 :(得分:0)
X-Editable使用Select2 3.5.2,它不直接使用jQuery.ajax()。它有自己的ajax函数,并像这样调用jQuery.ajax():
transport = options.transport || $.fn.select2.ajaxDefaults.transport
...
handler = transport.call(self, params);
这就是$.mockjax({url: '/getTaskTags'...
不起作用的原因。
要使其正常工作,您需要创建自己的传输功能,如下所示:
var transport = function (queryParams) {
return $.ajax(queryParams);
};
并设置传输选项:
ajax: {
url: '/getTaskTags',
=> transport: transport,
type: 'post',
dataType: 'json',
data: function (term, page) {
return { query: term };
},
results: function (data, page) {
return { results: data };
}
},