0

我有点卡在这里,似乎无法让 jQuery 自动完成为我工作。我正在尝试从 JSON 文档拉取自动完成。

IE:

http://REMOTE_HOST/names.json

哪个返回类似:

[{"label":"Brian House", "id" : 1},
{"label":"Joe Green", "id" : 2},
{"label":"Fisher Gennings", "id" : 3},
{"label":"Sheila Williams", "id" : 4},
{"label":"Brett Nelson", "id" : 5},
{"label":"Angie Katz", "id" : 6},
{"label":"Zoe Middleton", "id" : 7},
{"label":"Parker Jones", "id" : 9}]

我想要做的是在文本字段(user_friend_name)中自动完成标签,然后用 id 填充隐藏字段(user_friend_name_id)。

#user_friend_name
#user_friend_name_id

我目前正在使用的咖啡脚本。

$(document).ready ->
        $('#user_friend_name').autocomplete
                source: "http://REMOTE_HOST/names.json"
                select: (event,ui) -> $("user_friend_name_id").val(ui.item.id)

现在看起来我得到了所有名称的一个 JSON 拉取,但在您键入时没有选择或过滤。仅使用标准数组 ['foo', 'food', 'trees'] 作为源似乎工作正常。

4

2 回答 2

1

假设您的数据如上所示返回,那么ui.item.id就是要访问的正确属性。

我做了一个你的例子。尝试使用console.log()console.dir()调试属性。

http://jsfiddle.net/fMWqU/

如果您仍然没有运气,那么问题可能出在您的 json 文档上。确保文档与您的脚本在同一个域中,以防止跨域错误。我过去也注意到带有 Windows 行结尾的 json 文档会导致某些浏览器失败。尝试做一个常规$.ajax()console.dir()在 done() 和 fail() 处理程序中使用。

xhr = $.ajax
  url : 'http://REMOTE_HOST/names.json'
  dataType : 'json'

xhr.done ->
  console.log arguments

xhr.fail ->
  console.log 'Fail! ', arguments
于 2012-06-24T03:56:05.397 回答
0

我相信它们应该具有价值而不是 id 属性。我不熟悉咖啡脚本,但我确信这是清晰的:

$.getJSON("http://REMOTE_HOST/names.json", function(response) {
    var newData = response.map(function(el) { return {label: el.label, value: el.id })
    $('#user_friend_name').autocomplete
        source: "http://REMOTE_HOST/names.json"
        select: (event,ui) -> $("user_friend_name_id").val(ui.item.value)
})
于 2012-06-24T03:20:00.410 回答