2017-12-07 10 views
0

jQuery Autocomplete - wie Autofokus zu verhindern, wenn minLength Null

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>

Während sie durch die Seite Tabbing, Eingänge mit dem automatischen Vervollständigung füllen in Drop-Down mit der ersten Option standardmäßig aus. Wenn ich minLength = 1 eingestellt habe, Problem gelöst. Allerdings muss ich minLength = 0 behalten, um das Dropdown aufzuschalten, wenn die Eingabe fokussiert ist.

Ein Gedanke ist, dass die Fokusklasse entfernt wird, wenn Sie das Dropdown zuerst öffnen. Aber das Problem ist, wenn ich den Pfeil nach unten drücke, wird die zweite Option fokussiert anstatt die erste.

Ich kann keine Lösung finden, um die erste Option manuell zu fokussieren. Bitte helfen Sie.

Andere Lösungen sind mehr als willkommen. Danke im Voraus.

Antwort

0

Ich denke, das wird Ihnen helfen.


 
    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

Vielen Dank für Ihre Wiedergabe. Das Dropdown muss angezeigt werden, wenn das Eingabefeld fokussiert ist. Aus diesem Grund habe ich minLength = 0 für das Dropdown-Popup hinzugefügt. Ich möchte jedoch nicht die Standardfunktion der automatischen Fokussierung der ersten Option im Dropdown-Menü. Hoffe, das ist klar. – Sophia

+0

Ich glaube, ich habe das Problem gefunden. Wenn minLength = 0, Autofokus = true und Fokusfunktion kombiniert wird, wird das Dropdown-Menü mit dem ersten fokussierten Objekt angezeigt. Ich brauche minLength und auf Fokus-Funktion, um das Dropdown auf den ersten Punkt zu popup. Ich brauche Autofokus, wenn der Benutzer etw eingibt und die Option automatisch fokussiert ist. Aber ich möchte nicht, dass die erste Option fokussiert wird, wenn der Benutzer nichts eingibt. Ich hoffe, ich mache Sinn. $ ("#test") .autocomplete ({ Quelle: availableTags, minLength: 0, Autofokus: true }) auf ("Focus", function() { $ (this) .autocomplete (“. Suche "); }) ;; – Sophia

0

Sie brauchen Hoffnung auf .availableTags ändern .autocomplete in den letzten Teil Ihrer js.I das Sie

$(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

Okay, helfen, Das ist, was ich habe, um mein Problem zu beheben. Anstatt autoFocus zu verwenden, setze ich den Fokus manuell in die offene Funktion.

$("#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", ""); 
 
    });

Verwandte Themen