2013-10-07 2 views
2

나는 작동하는 바이올린을 가지고 있지만 자동 완성 기능은 브라우저에 아무 것도 표시하지 않습니다. 바이올린은 여기에서 볼 수있다 : 내 자바 스크립트에서JQuery 자동 완성 결과가 브라우저에 표시되지 않는 이유는 무엇입니까?

<head> 
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" /> 
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.2/jquery.mobile-1.3.2.min.css" /> 
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
<script src="http://code.jquery.com/mobile/1.3.2/jquery.mobile-1.3.2.min.js"></script> 
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script> 

<script type ="text/javascript" src="myScripts.js"></script> 
<script type ="text/javascript" src="jquery.csv-0.71.js"></script> 
<script type ="text/javascript" src="csvToArray.v2.1.js"></script> 
</head> 


<body> 
<div data-role="page" id="main"> 

    <div data-role="header"> 
     <h1>Test</h1> 
    </div> 

    <div id="contentDiv" data-role="content"> 
     <input type="text" id="food" placeholder="Type (First Name) Here" />   
    </div> 

</div> 
</body> 

, 나는 파일에서 텍스트를 읽는하여 JSON 변수를 초기화하고 있습니다 : Working Fiddle되는 HTML에서

, 내가 테스트 목적으로 하나 개의 입력 요소가 있습니다. 내 json 변수에 대한 경고를 표시하여 초기화가 성공적인지 테스트했습니다. 내 자동 완성에서 해당 json 변수를 소스로 사용하려고합니다. 다음, 나는 문제를 좁히기 위해 JSON 변수의 초기화를 하드 코딩으로 내 자바 스크립트를 단순화 :

var jsonVersion =  
[{"description":"mac and cheese", "servingSize":"1 cup", "calories":"500"}, 
{"description":"slice of pizza", "servingSize":"1 slice", "calories":"400"}, 
{"description":"oreo cookie", "servingSize":"1 cookie", "calories":"100"}, 
{"description":"salad", "servingSize":"1 cup", "calories":"50"}, 
{"description":"apple", "servingSize":"1 apple", "calories":"70"}]; 

$('#food').autocomplete({ 
        source: jsonVersion, 
        select: function (event, ui) { 
        selectedObj = ui.item; 
        alert("selected object=" + selectedObj.value); 
                }, 
        minLength: 1 
         }); 

이 바이올린에 있지만 브라우저에서 작동 왜 어떤 생각? 브라우저 오류가 발생하지 않습니다. 텍스트 상자에 입력 할 때 아무 것도 표시되지 않습니다.

편집

아마도 내가 내 jsonVersion을 채우는하고있는 방법이다 - 나는 "경고"를 통해 jsonVersion를 인쇄 할 때, 그것은 잘 보이지만. 내가 여기서 뭘 잘못하고 있는지에 대한 조언은 인정 될 것이다. 다음은 전체 자바 스크립트 파일입니다. "데이터"배열의 배열 및 개체 배열을 만드는 개체를 만들려면 해당 배열을 통해 반복하고 있습니다. 그 때 나는 캐릭터 라인 화하여 JSON으로 객체의 배열을 변환 : 스크립트 안에 준비 핸들러를 dom으로하지 않습니다 같은

$(function ($) { 
    var jsonVersion; 
    var arrayOfObjects; 
    $.ajax({ 
      type: "GET", 
      url: "test.js", 
      dataType: "text", 
      success: function(data) { 
            data = $.csv.toArrays(data); 
            arrayOfObjects = new Array(); 
            for(var i=1; i<data.length; i++)//skipping over header 
            { 
             var foodObject = new Object(); 
             foodObject.label = data[i][1]; 
             foodObject.weight = data[i][2]; 
             foodObject.servingSize = data[i][3]; 
             foodObject.calories = data[i][4]; 
             arrayOfObjects.push(foodObject); 
            } 
            jsonVersion = JSON.stringify(arrayOfObjects); 
            alert(jsonVersion); 
            } 
      }); 

    $('#food').autocomplete({ 
          source: jsonVersion, 
          select: function (event, ui) { 
          selectedObj = ui.item; 
          alert("selected object=" + selectedObj.value); 
                  }, 
          minLength: 1 
          }); 
}) 
+1

가 $'에 방법을 포장은 (함수() {})는'- 바이올린은 – karthikr

+1

당신의 코드가 다른 당신을위한 래퍼 추가 바이올린의 코드.'jsonVersion'의 객체는'description' 속성이나'label' 속성을 가지고 있습니까? autocomplete가 다른 수정없이 작동하게하려면'label' 및/또는'value' 속성이 필요합니다. –

+1

'$ .ajax' 성공 함수 안에'autocomplete' 초기화 코드를 넣어야합니다. 요청이 완료되면 ** 위젯이 초기화되고'jsonVersion'이 비어 있습니다. –

답변

1

당신은 두 가지 주요 문제가있다 :

  1. 문자열을 자동 완성이라는 source 옵션에 전달 중입니다. 이렇게하면 위젯은 해당 문자열을 URL로 사용하여 결과를 검색합니다. 이 문자열은 AJAX 호출 결과로 작성한 배열의 JSON 표현이기 때문에 예상대로 작동하지 않습니다. 대신 arrayOfObjects을 사용해야합니다.

  2. AJAX 요청에 대한 success 콜백 외부의 자동 완성 위젯을 초기화하고 있습니다. 즉, 자동 완성 위젯은 빈 소스로 초기화됩니다. 단순히 초기화를 success 콜백으로 이동하면 해결할 수 있습니다. 당신의 문제를 해결해야 이런 것들을 모두 해결

:

$(function ($) { 
    $.ajax({ 
     type: "GET", 
     url: "test.js", 
     dataType: "text", 
     success: function(data) { 
      data = $.csv.toArrays(data); 
      var arrayOfObjects = []; 
      for(var i=1; i<data.length; i++)//skipping over header 
      { 
       var foodObject = new Object(); 
       foodObject.label = data[i][1]; 
       foodObject.weight = data[i][2]; 
       foodObject.servingSize = data[i][3]; 
       foodObject.calories = data[i][4]; 
       arrayOfObjects.push(foodObject); 
      } 

      $('#food').autocomplete({ 
       source: arrayOfObjects, 
       select: function (event, ui) { 
        selectedObj = ui.item; 
        alert("selected object=" + selectedObj.value); 
       }, 
       minLength: 1 
      });    
     } 
    }); 
}); 
+0

정말 고마워요. 이것은 트릭을했다. 그건 그렇고, 두 문제에 대한 훌륭한 설명. – Lani1234

+0

@ Lani1234 : 문제 없습니다! 기꺼이 도와주세요. –

0

보인다. jsfiddle에서

은, 왼쪽 패널 onload에서 두 번째 드롭 다운에 스크립트에 대한 포장 onLoad 핸들러를 추가하는 응용 프로그램을 말한다 - 당신이 on head를 선택하는 경우가 작동하지 않습니다 fiddle

jQuery(function ($) { 
    var jsonObject = [{ 
     "label": "mac and cheese", 
      "servingSize": "1 cup", 
      "calories": "500" 
    }, { 
     "label": "slice of pizza", 
      "servingSize": "1 slice", 
      "calories": "400" 
    }, { 
     "label": "oreo cookie", 
      "servingSize": "1 cookie", 
      "calories": "100" 
    }, { 
     "label": "salad", 
      "servingSize": "1 cup", 
      "calories": "50" 
    }, { 
     "label": "apple", 
      "servingSize": "1 apple", 
      "calories": "70" 
    }]; 

    $('#food').autocomplete({ 
     source: jsonObject, 
     select: function (event, ui) { 
      selectedObj = ui.item; 

      alert("selected object=" + selectedObj.value); 
     }, 
     minLength: 1 
    }); 
}) 

데모 : Fiddle

업데이트 :

$(function ($) { 
    var arrayOfObjects = []; 
    $.ajax({ 
     type: "GET", 
     url: "test.js", 
     dataType: "text", 
     success: function (data) { 
      data = $.csv.toArrays(data); 
      for (var i = 1; i < data.length; i++) //skipping over header 
      { 
       var foodObject = new Object(); 
       foodObject.label = data[i][1]; 
       foodObject.weight = data[i][2]; 
       foodObject.servingSize = data[i][3]; 
       foodObject.calories = data[i][4]; 
       arrayOfObjects.push(foodObject); 
      } 
     } 
    }); 

    $('#food').autocomplete({ 
     source: arrayOfObjects, 
     select: function (event, ui) { 
      selectedObj = ui.item; 
      alert("selected object=" + selectedObj.value); 
     }, 
     minLength: 1 
    }); 
}) 
+0

감사합니다. 한 걸음 앞으로 나아가십시오. 이제 브라우저 오류가 발생합니다 : 객체 [객체 객체]의 '소스'속성이 함수가 아닙니다. – Lani1234

+0

@ Lani1234 무엇이 오류입니까 –

+0

객체 [객체 객체]의 'source'속성이 함수가 아닙니다 – Lani1234

관련 문제