2011-02-23 4 views
0

5 개의 결과가 실제로 표시 될 때만 Displaying top 5 results라고하는 꼬리말을 표시하도록 자동 완성을 사용하고 싶습니다.5 개의 결과가있을 때만 YUI 자동 완성 바닥 글 표시

지금까지 5 개의 결과가 처음에는 표시되지 않지만 5 개의 결과가로드되면 실제로 표시되는 결과의 수에 관계없이 바닥 글이 항상 표시되도록 설정되었습니다. .

변칙적 인 변칙의 어색한 변명을 부탁드립니다. flip

oAC.formatResult = function(oResultData, sQuery, sResultMatch) { 
     var sKey = sResultMatch 

     // Extract the part of the match that the user did not type 
     var sKeyRemainder = sKey.substr(sQuery.length); 


     oAC.setFooter(""); 
     var aMarkup = ["<div class='myCustomResult'>", 
          "<span style='font-weight:bold'>", 
          sQuery, 
          "</span>", 
          sKeyRemainder, 
          "<br>", 
          "</div>"]; 

     if (oResultData[2] >= 4) { 
      flip = true; 
     } 
     if (flip) { 
      oAC.setFooter("<div style=\"margin-left:5px;\"><span style=\"font-weight:bold;\">See more results for " + sQuery + "</span><br>Showing top 5 results</div>"); 
     } 
     return (aMarkup.join("")); 
     }; 

답변

1

formatResult 함수에서 설정하려는 대신 doBeforeExpandContainer 함수를 사용해 보았는데 매력적으로 작동합니다.

oAC.formatResult = function(oResultData, sQuery, sResultMatch) { 
    var sKey = sResultMatch 

    // Extract the part of the match that the user did not type 
    var sKeyRemainder = sKey.substr(sQuery.length); 


    oAC.setFooter(""); 
    var aMarkup = ["<div class='myCustomResult'>", 
         "<span style='font-weight:bold'>", 
         sQuery, 
         "</span>", 
         sKeyRemainder, 
         "<br>", 
         "</div>"]; 

    oAC.setFooter("<div class=\"ac-footer\"><div class=\"ac-footer-content\"><a class=\"ac-footer-link\" href=\"#\" onclick=\"spandex(this,event,'filter-company');return false;\">See more results for <b>" + sQuery + "</b></a><br><span class=\"ac-footer-sub\">Showing top 5 results</span></div></div>"); 

    return (aMarkup.join("")); 
}; 

oAC.doBeforeExpandContainer = function(sQuery, oResponse) { 
    if (oAC._nDisplayedItems <= 5) { 
     oAC.setFooter(""); 
    } 

    return true; 
} 

doBeforeExpandContainer은 (당신이 그것을 기대하는 것처럼)와 _nDisplayedItems 많은 항목이 목록 (또한 당신이 기대하는 것처럼)에 표시 될 방법입니다 컨테이너가 열릴 때마다 호출된다.

결과가 검색 될 때마다 바닥 글이 매번 추가됩니다. 그런 다음 상자가 표시되기 전에 결과가 5 개 이하이면 바닥 글이 제거됩니다.

0

5 개의 결과가있을 때만 바닥 글을 표시 하시겠습니까?

그럼 당신은

if (oResultData[2] == 4) { // is this a zero based number? or should this be 5? 
    flip = true; 
} 
else { flip = false } // assuming you don't already reset this in scope 

if (oResultData[2] >= 4) { 
    flip = true; 
} 

을 변경하지 마십시오?

+0

그래, 내가 시도한 여러 가지 유사한 경로 중 한 가지 변형입니다. autocomplete가 표시 될 때마다 formatResult 함수가 호출되면 작동합니다. 그러나 결과를 검색 할 때만 호출됩니다. 따라서이 논리를 사용하여 편지를 입력하고 5 개 이상의 결과를 얻으면 바닥 글이 표시됩니다. 그런 다음 글자를 더 입력하면 결과 수가 줄어 듭니다. 일단 5 이하로 내려 가면 바닥 글이 사라집니다. 그러나 결과가 이미 검색되었으므로이 함수는 호출되지 않고 바닥 글은 영향을받지 않습니다. – Jimmy