2016-07-26 11 views
0

habe ich eine Textbox und dann eine ungeordnete Liste wie unten:Feuer Click-Ereignis von li vor ul versteckt

<div> 
    <input type="text" /> 
    <button>Go</button> 
</div> 
<ul> 
    <li>A</li> 
    <li>B</li> 
    <li>C</li> 
</ul> 

Jetzt im Unschärfe Ereignisse von Textbox:

$('input').on('blur', function() { 
    $('ul').hide(); 
}); 

Der obige Code funktioniert fein.

Ich versuche, etwas wie combobox zu machen.

Also, mein gewünschtes Verhalten ist:

  • Wenn Textbox den Fokus verliert, sollten Vorschläge verstecken (die oben gezeigt wird)
  • Wenn auf einem Vorschlag geklickt hat, sollte ihr Click-Ereignis ausgelöst und dann Text dieses Vorschlags gefüllt werden soll in Textbox und dann sollten alle Vorschläge
  • Also, für die zweite Funktionalität verbergen, wenn ich auf jeden li den click Fall li klicken soll abfeuern und dann ul versteckt werden soll.

    Antwort

    1

    var items = ["Apple", "Banana", "Celery", "Peach", "Plum"]; 
     
    
     
    $('input').on('input', function() { 
     
        var text = $(this).val(); 
     
        $('ul').show().empty().append(items.filter(function(item) { 
     
        return item.match(new RegExp(text, 'i')); 
     
        }).map(function(text) { 
     
        return $('<li>').text(text); 
     
        })); 
     
    }); 
     
    
     
    $('input').on('blur', function() { 
     
        $('ul').fadeOut(); 
     
    }); 
     
    
     
    $('ul').on('click', 'li', function() { 
     
        $('input[type=text]').val($(this).text()); 
     
        $('ul').hide(); 
     
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
     
    <div> 
     
        <input type="text" /> 
     
        <button>Go</button> 
     
    </div> 
     
    <ul> 
     
    </ul>

    +0

    Danke für die Antwort. Versuchen Sie, auf Apple zu klicken. – Vishal

    +0

    @Vishal behoben. BTW, das ist nicht Tastatur zugänglich. Abhängig von Ihrem genauen Bedarf, können Sie nur 'combobox' verwenden – acbabis

    +0

    Ich würde kein Timeout verwenden, da meine UL eine Bildlaufleiste haben kann. Und wenn der Benutzer scrollt, kann nach dem Timeout ul verschwinden. Trotzdem werde ich es versuchen, bevor ich dich etwas anderes frage. BTW danke für die Antwort. – Vishal

    0

    Aktualisieren Sie einfach die Textbox und dann die ul innerhalb der gleichen Klick-Ereignis der li.

    $("li").on("click", function() { 
        $("input[type=text]").val(this.text()); 
        $("ul").hide(); 
    }); 
    

    Sorry, wenn die jQuery nicht perfekt ist - ich benutze es nicht so oft. Das sollte sowieso helfen.

    +0

    habe ich versucht, dass vor der Frage zu stellen. Wenn ich auf li klicke, hat Textbox bereits den Fokus verloren, also ist ul versteckt und inturn li ist versteckt, also li click feuert nicht. – Vishal

    +0

    Oh, okay. Ich habe das nicht von der Post bekommen. Sieht aus, als hättest du sowieso eine Lösung. ^^ – Whothehellisthat

    +0

    Ja, ich habe die Lösung. Danke für die Hilfe. – Vishal