2016-09-10 1 views
0

テキストボックスでUP/DOWN矢印キーを押すと、選択したクラスがリストアイテムに適用されます。リスト項目の上にマウスポインタを移動し、上下矢印キーを同時に押すと、ホバーと選択されたクラスの両方がリスト項目に適用されます。選択入力オプションに似たホバリングと選択されたクラスを切り替えるには?マウスのホバースタイルが適用されているときに矢印キーのナビゲーションでリストアイテムに適用された選択されたクラスを削除します

http://jsfiddle.net/AyAZx/790/

$('#college').keyup(function(e) { 
 

 
    var $listItems = $('.field-wrap li'); 
 
    var key = e.keyCode, 
 
    $selected = $listItems.filter('.selected'), 
 
    $current; 
 

 
    $listItems.removeClass('selected'); 
 

 

 
    var menu = $('#college_list'); 
 
    var height = $selected.outerHeight(); 
 
    var top = menu.scrollTop(); 
 
    var menuHeight = menu[0].scrollHeight; 
 

 
    if (key == 40) // Down key 
 
    { 
 
    if (!$selected.length || $selected.is(':last-child')) { 
 
     $current = $listItems.eq(0); 
 
     menu.scrollTop(0); 
 
    } else { 
 
     $current = $selected.next(); 
 
     menu.scrollTop(top + height); 
 
    } 
 

 
    $current.addClass('selected'); 
 
    } 
 

 
    if (key == 38) // Up key 
 
    { 
 
    if (!$selected.length || $selected.is(':first-child')) { 
 
     $current = $listItems.last(); 
 
     menu.scrollTop(menuHeight + height); 
 
    } else { 
 
     $current = $selected.prev(); 
 
     menu.scrollTop(top - height); 
 
    } 
 
    $current.addClass('selected'); 
 
    } 
 

 
});
.field-wrap ul { 
 
    width: 93%; 
 
    margin-top: 1px; 
 
    border: 1px solid #3498DB; 
 
    position: absolute; 
 
    z-index: 9; 
 
    background: white; 
 
    list-style: none; 
 
    max-height: 100px; 
 
    overflow-y: auto; 
 
} 
 
.field-wrap ul li { 
 
    padding: 2px; 
 
    border: solid grey; 
 
    border-width: 0 0 2px 0; 
 
} 
 
.field-wrap ul li:hover { 
 
    background: #2980B9; 
 
}
<div class="field-wrap"> 
 
    <input type="text" id="college" placeholder="Name" required autocomplete="off" /> 
 
    <ul id="college_list"> 
 
    <li>abc</li> 
 
    <li>def</li> 
 
    <li>asdff</li> 
 
    <li>dasdf</li> 
 
    <li>asdef</li> 
 
    <li>asdf</li> 
 
    <li>asf</li> 
 
    <li>asdef</li> 
 
    </ul> 
 
</div>

答えて

1

私はこのケースでは、あなたがCSSを交換する必要があります怖い:のMouseMoveイベントに置く:ソリューションの

$('#college_list li').mousemove(function() { 
    $('.field-wrap li').removeClass('selected'); 
    $(this).addClass('selected'); 
}); 
+0

感謝を。これはJSFiddleでうまく動作します。しかし、クロールブラウザでコードを実行すると(削除されたホバーCSS)、最初にリスト内のマウスポインタを移動すると、選択されたクラスが適用されません。上/下キーを押すと、マウスポインタ(ホバー)が期待通りに機能します。 – Vijay

+0

さて、私はChromeでそれをテストし、それは私のためにうまくいきます。おそらく$(ウィンドウ).ready(関数(){...})にjsの部分を入れて;あなたに役立ちます – Benjamin

+1

なぜ私のために働いていないのかがわかりました。私はデータベースからキーアップイベント(AJAX Livesearch)に基づいてli項目を取得しています。 li項目は動的にフェッチされ、返されます(echo '

  • ' $ college_name。 '
  • ';)を押します。私がmousemove関数をkeyupイベント関数から外すと、mousemove関数はまったく実行されません。しかし、私がキーアップイベント機能の中に配置し、初めてmousemove機能が働いているときにアップ/ダウンキーを押すと、この問題を解決するソリューションはありますか? – Vijay

    関連する問題