2014-11-10 5 views
1

이 오류 : "잡히지 않은 TypeError : 문자열이 함수가 아닙니다."는 내가하려고하는 Ajax 호출에서 반환됩니다.잡히지 않은 TypeError : 문자열이 함수가 아닙니다. - Ajax 호출시

코드는 다음과 같습니다

$('input.js-nome-produto-servico').live("keyup", function(ed, h){ 
    var $campo = ed.currentTarget; 

    $campo.autocomplete({ 
     source: "<%=Rails.application.routes.url_helpers.busca_todos_produtos_servicos_por_nome_comercial_produto_servico_oportunidades_path%>?nome="+$campo.value, 
     minLength: 2, 
     change: function(event, ui) { 
      bindLoadingAnimation(); 
     }, 
     select: function(event, ui) { 
      preencheCamposCliente(campo); 
     } 
    }); 
}); 

오류에 $ campo.autocomplete에 상승하고있다.

는 내가 같은 호출해야합니다 알고

$("#field-id").autocomplete({ ......... 

을하지만 같은 방식에 동일한 "의 keyup"이벤트에 응답하고 같은 클래스 (JS-놈-produto-를 사용해야하는 여러 필드가 servico).

그래서 나는 keyup 함수 (ed)에서 DOM 객체 (입력)를 얻으려고했다. 디버거를 호출하면 변수 $ campo에 올바른 객체가 있지만 자동 완성이 작동하지 않습니다.

여기에 JS/JQuery 개념이없는 것 같습니다. 아무도 나에게 올바른 방법을 줄 수 있습니까?

대단히 감사합니다!

+1

'var $ campo = $ (ed.currentTarget);'그러나 여전히 당신은 jQuery 플러그인을 keyup 이벤트 핸들러에 바인딩해서는 안됩니다. 나는 당신이 단지'$ ('input.js-nome-produto-servico'). 자동 완성 ({...})'을 필요로한다고 생각한다. '.live ("keyup"'. – dfsq

+0

이 없어도 사용자가 필드에 입력하는 문자가 필요하므로 자동 완성 소스를 채울 결과를 검색 할 수 있습니다. 이것이 내가 Live 함수를 호출하는 이유입니다. – Laerte

답변

0

누구나 같은 문제에 직면하는 경우 해결 방법은 $ (this) 태그를 사용하는 것입니다. 코드는 다음과 같습니다 :

$('input.js-nome-produto-servico').live("keyup", function(ed, h){ 

$(this).autocomplete({ 
    source: "<%=Rails.application.routes.url_helpers.busca_todos_produtos_servicos_por_nome_comercial_produto_servico_oportunidades_path%>?nome="+$(this).val(), 
    minLength: 2, 
    change: function(event, ui) { 
     bindLoadingAnimation(); 
    }, 
    select: function(event, ui) { 
     preencheCamposCliente($(this)); 
    } 
});}); 

$ (this)는 'keyup'이벤트의 영향을받은 객체입니다.

0

"검색"이벤트를 시도 했습니까? 좋아요 :

$('.your_class').autocomplete({ 
     source: "<%=Rails.application.routes.url_helpers.busca_todos_produtos_servicos_por_nome_comercial_produto_servico_oportunidades_path%>?nome="+ $(this).val(), 
     //below I replace the Minlength 
     search: function(){ 
      if ($(this).val().length < 2) { 
      return false; 
      } 
     } 
     change: function(event, ui) { 
      bindLoadingAnimation(); 
     }, 
     select: function(event, ui) { 
      preencheCamposCliente(campo); 
     } 
    }); 

맞습니까?

관련 문제