2017-12-07 54 views
0

의 jQuery 자동 완성 - 자동 초점을 방지하는 방법을 MINLENGTH는 </p> <p>페이지를 통해 탭 이동하는 동안

var availableTags = [ 
 
    "ActionScript", 
 
    "AppleScript", 
 
    "Asp", 
 
    "BASIC", 
 
    "C", 
 
    "C++", 
 
    "Clojure", 
 
    "COBOL", 
 
    "ColdFusion", 
 
    "Erlang", 
 
    "Fortran", 
 
    "Groovy", 
 
    "Haskell", 
 
    "Java", 
 
    "JavaScript", 
 
    "Lisp", 
 
    "Perl", 
 
    "PHP", 
 
    "Python", 
 
    "Ruby", 
 
    "Scala", 
 
    "Scheme"]; 
 
    
 
    $("#test").autocomplete({ 
 
     minLength: 0, 
 
     source: availableTags, 
 
     autoFocus: true, 
 
     select: function (event, ui) { 
 
      if (ui.item) { 
 
       event.preventDefault(); 
 
       $(this).val(ui.item.label); 
 
      } 
 
     }, 
 
     open: function (event, ui) { 
 
      var menu = $(this).data("uiAutocomplete").menu; 
 
      var items = $('li', menu.element); 
 

 
      for (var i = 0; i < items.length; i++) { 
 
       if (items.eq(i).text().startsWith($(this).val())) { 
 
        menu.focus(null, items.eq(i)); 
 
        break; 
 
       } 
 
      } 
 
     }, 
 
     focus: function (event, ui) { 
 
      event.preventDefault(); 
 
      if ($(this).val() == "" && !event.keyCode) { 
 
       //debugger; 
 
       $('.ui-menu-item a').removeClass('ui-state-focus'); 
 
      } 
 
      else {    
 
       //$(this).data("uiAutocomplete").menu.element.children().first().focus(); 
 
      } 
 
     } 
 
    }).on("focus", function() { 
 
     $(this).autocomplete("search", ""); 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="form-group"> 
 
    <label for="test" class="col-md-3 col-lg-3 control-label"></label> 
 
    <div class="col-md-9 col-lg-7"> 
 
     <input id="test" type="text" class="form-control" /> 
 
    </div> 
 
</div>
제로, 자동 완성 입력이 드롭 다운에서 첫 번째 옵션을 기본으로 작성되는 경우. minLength = 1으로 설정하면 문제가 해결됩니다. 그러나 입력이 집중되었을 때 드롭 다운을 팝업하려면 minLength = 0을 유지해야합니다.

먼저 드롭 다운을 팝업 할 때 포커스 클래스를 제거하는 것이 좋습니다. 그러나 문제는 내가 화살표 다운을 누르면, 두 번째 옵션은 첫 번째 옵션 대신 집중된 것입니다.

수동으로 첫 번째 옵션을 집중시키는 방법을 찾을 수 없습니다. 도와주세요.

다른 해결책도 환영합니다. 미리 감사드립니다.

답변

0

내가 생각하기에 이것은 당신을 도울 것입니다.


 
    var availableTags = [ 
 
     "ActionScript", 
 
     "AppleScript", 
 
     "Asp", 
 
     "BASIC", 
 
     "C", 
 
     "C++", 
 
     "Clojure", 
 
     "COBOL", 
 
     "ColdFusion", 
 
     "Erlang", 
 
     "Fortran", 
 
     "Groovy", 
 
     "Haskell", 
 
     "Java", 
 
     "JavaScript", 
 
     "Lisp", 
 
     "Perl", 
 
     "PHP", 
 
     "Python", 
 
     "Ruby", 
 
     "Scala", 
 
     "Scheme" 
 
    ]; 
 
    $("#test").autocomplete({ 
 
     source: availableTags 
 
    }); 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> 
 
    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> 
 
    <link rel="stylesheet" href="/resources/demos/style.css"> 
 

 
<div class="form-group"> 
 
    <label for="test" class="col-md-3 col-lg-3 control-label"></label> 
 
    <div class="col-md-9 col-lg-7"> 
 
     <input id="test" type="text" class="form-control" /> 
 
    </div> 
 
</div>

+0

감사합니다. 입력 필드에 포커스가있을 때 드롭 다운이 표시되어야합니다. 그래서 minLength = 0에 드롭 다운이 포함되었습니다. 그러나 나는 드롭 다운의 첫 번째 옵션에 초점을 맞추는 자동 기능의 기본 기능을 원하지 않는다. 희망이 분명하다. – Sophia

+0

나는이 문제를 발견했다고 생각한다. minLength = 0, autofocus = true 및 focus 함수를 결합하면 첫 번째 항목이 집중된 드롭 다운이 표시됩니다. 첫 번째 지점에서 드롭 다운을 팝업하려면 minLength 및 포커스 기능이 필요합니다. 사용자가 sth를 입력하고 옵션에 자동 초점이 맞춰지면 자동 초점이 필요합니다. 그러나 사용자가 아무 것도 입력하지 않으면 첫 번째 옵션에 집중하는 것을 원하지 않습니다. 희망을 나는 이해하고있다. $ ("#test") .autocomplete ({ 출처 : availableTags, MINLENGTH : 0, 자동 초점 : 사실 }) ("초점"함수() { $ (이) .autocomplete ("에. 검색 "); }) ;; – Sophia

0
당신은 당신의 js.I의 마지막 부분에 .availableTags에 .autocomplete 변경해야

이 당신에게

$(function() { 
 
var availableTags = [ 
 
    "ActionScript", 
 
    "AppleScript", 
 
    "Asp", 
 
    "BASIC", 
 
    "C", 
 
    "C++", 
 
    "Clojure", 
 
    "COBOL", 
 
    "ColdFusion", 
 
    "Erlang", 
 
    "Fortran", 
 
    "Groovy", 
 
    "Haskell", 
 
    "Java", 
 
    "JavaScript", 
 
    "Lisp", 
 
    "Perl", 
 
    "PHP", 
 
    "Python", 
 
    "Ruby", 
 
    "Scala", 
 
    "Scheme"]; 
 
    
 
    $("#test").autocomplete({ 
 
     minLength: 0, 
 
     source: availableTags, 
 
     autoFocus: true, 
 
     select: function (event, ui) { 
 
      if (ui.item) { 
 
       event.preventDefault(); 
 
       $(this).val(ui.item.label); 
 
      } 
 
     }, 
 
     open: function (event, ui) { 
 
      var menu = $(this).data("uiAutocomplete").menu; 
 
      var items = $('li', menu.element); 
 

 
      for (var i = 0; i < items.length; i++) { 
 
       if (items.eq(i).text().startsWith($(this).val())) { 
 
        menu.focus(null, items.eq(i)); 
 
        break; 
 
       } 
 
      } 
 
     }, 
 
     focus: function (event, ui) { 
 
      event.preventDefault(); 
 
      if ($(this).val() == "" && !event.keyCode) { 
 
       //debugger; 
 
       $('.ui-menu-item a').removeClass('ui-state-focus'); 
 
      } 
 
      else {    
 
       //$(this).data("uiAutocomplete").menu.element.children().first().focus(); 
 
      } 
 
     } 
 
    }).on("focus", function() { 
 
     $(this).availableTags("search", ""); 
 
    }); 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> 
 
    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> 
 
    <link rel="stylesheet" href="/resources/demos/style.css"> 
 

 
<div class="form-group"> 
 
    <label for="test" class="col-md-3 col-lg-3 control-label"></label> 
 
    <div class="col-md-9 col-lg-7"> 
 
     <input id="test" type="text" class="form-control" /> 
 
    </div> 
 
</div>

0

좋아 도움이 될 것입니다 희망 이것이 내 문제를 해결할 수있는 이유입니다. autoFocus를 사용하는 대신 open 함수에서 포커스를 수동으로 설정했습니다. 당신의 재생에 대한

$("#test").autocomplete({ 
 
     minLength: 0, 
 
     source: availableTags, 
 
     //autoFocus: true, 
 
     select: function (event, ui) { 
 
      if (ui.item) { 
 
       event.preventDefault(); 
 
       $(this).val(ui.item.label); 
 
      } 
 
     }, 
 
     open: function (event, ui) { 
 
      var menu = $(this).data("uiAutocomplete").menu; 
 
      var items = $('li', menu.element); 
 

 
      if ($(this).val().length > 0) { 
 
       for (var i = 0; i < items.length; i++) { 
 
        if (items.eq(i).text().toUpperCase().includes($(this).val().toUpperCase())) { 
 
         menu.focus(null, items.eq(i)); 
 
         break; 
 
        } 
 
       } 
 
      } 
 
     }, 
 
     focus: function (event, ui) { 
 
      event.preventDefault(); 
 
     } 
 
    }).on("focus", function() { 
 
     $(this).autocomplete("search", ""); 
 
    });