0

在下面的代码(Coffeescript)中,在对 jQuery 自动完成数据源的 AJAX 调用中,在代码的第 5 行,我传递了 2 个参数 - term: 和 ll: For ll: 我正在尝试获取 $(this)成为应用 .autocomplete 的 DOM 元素。在这种情况下,它的 $('[type="text"][name*="[location]"]') 我需要在第 5 行用 ($this) 专门引用该 DOM 元素。但是,我相信 'this'在那个范围内指的是不是 DOM 元素的其他东西。有人可以帮忙解释我需要做什么吗?

$('[type="text"][name*="[location]"]').autocomplete(
    source: (request, response) ->
      $.ajax 
        url: $('[type="text"][name*="[location]"]').data('autocomplete-source')
        data: {term: request.term, ll: $(this).siblings('[name*="[geocode_location]"]')}
        contentType: "application/json; charset=utf-8"
        success: (data) ->
          response $.map(data, (item) ->
            value: item.value
            label: item.label
            address: item.address
          )

    focus: (event, ui) ->
      event.preventDefault()
      $(this).val ui.item.label
    select: (event, ui) ->
      event.preventDefault()
      $(this).val ui.item.label
      $(this).siblings('[name*="[foursquare_id]"]').val ui.item.value
  ).data("autocomplete")._renderItem = (ul, item) ->
    $("<li>").data("item.autocomplete", item).append("<a>" + item.label + "<br>" + item.address + "</a>").appendTo ul
4

3 回答 3

3

我不能告诉你任何关于 Coffeescriptthis.element的事情,但应该返回元素(它是一个 jQuery 对象)

所以应该是:

ll:this.element.siblings('[name*="[geocode_location]"]')

但这不起作用,因为兄弟姐妹返回一个 jQuery 对象并且不能作为请求参数传递。

于 2012-11-01T21:35:10.157 回答
0

就像@Dr.Molle 建议的那样,this.element 有助于获得我想要的DOM 元素。更新了下面的代码块。请参阅第 5 行了解我如何应用它。

$('[type="text"][name*="[location]"]').autocomplete(
    source: (request, response) ->
      $.ajax 
        url: $('[type="text"][name*="[location]"]').data('autocomplete-source')
        data: {term: request.term, ll: this.element.siblings('[name*="[geocode_location]"]').val()}
        contentType: "application/json; charset=utf-8"
        success: (data) ->
          response $.map(data, (item) ->
            value: item.value
            label: item.label
            address: item.address
          )

    focus: (event, ui) ->
      event.preventDefault()
      $(this).val ui.item.label
    select: (event, ui) ->
      event.preventDefault()
      $(this).val ui.item.label
      $(this).siblings('[name*="[foursquare_id]"]').val ui.item.value
  ).data("autocomplete")._renderItem = (ul, item) ->
    $("<li>").data("item.autocomplete", item).append("<a>" + item.label + "<br>" + item.address + "</a>").appendTo ul
于 2012-11-01T21:47:26.237 回答
0

您在自动完成功能中缺少大括号,并且您的选择器在我的测试用例中不起作用..

试试这个 jQuery 选择器:

$('input[type="text"][name*="location"]').autocomplete({ ....
于 2012-11-01T21:10:52.533 回答