0

あまりにも長い間これを行っていないので、明らかな間違いを許してください

    switch (event.keyCode) {
case 38:
    $("div.sseholdh").removeClass(function(){
    alert($(this).next().attr("title")); // doesn't alert
    $(this).next().addClass('sseholdh');
    return 'sseholdh';
    }); // does remove the class , but doesn't add it to the next sibling
break;
...
default:
    $("div.ssehold:eq(0)").addClass("sseholdh"); // does work
} // switch keycode

html は次のようになります。

<div class="sshold">
  <div title="entry 1" class="ssehold"> entry 1 </div>
  <div title="entry 2" class="ssehold"> entry 2 </div>
...
</div>
4

2 に答える 2

0

私があなただったら、あなたの div にも一意の ID を与えることから始めます。個人的な好みかもしれませんが、使いやすいと思います。

次に、すべてのコードを(スイッチ内から)捨てて、これから始めます:

switch (event.keycode){ case 38: alert('Hello World.'); }

それが機能するかどうかを確認してください。たぶん、あなたのスイッチが機能していないだけです。調べてみたらkeyode 38の「L」が正しい?

(私が知っている限り、これは最良の答えではないかもしれませんが、まだコメントできないので、これが今のところ唯一の方法です)

于 2011-11-08T07:54:48.430 に答える
0

JavaScript を次のように変更しないでください。removeClass()関数内にクラスを追加する必要はありません。

switch (event.keyCode) {
    case 38:
        $("div.sseholdh").removeClass('sseholdh').next().addClass('sseholdh');
        break; //...
    default:
        $("div.ssehold:eq(0)").addClass("sseholdh"); // does work
} // switch keycode

編集:テストに使用される基本的な jsFiddle: http://jsfiddle.net/greglockwood/wy9ZX/

編集2:これは、実際のサイトのマークアップであなたがしようとしていることを行うように見えるより完全なバージョンです:

        switch (event.keyCode) {
        case 38:
            // up arrow
            var highlight = $("div.sseholdh");
            // if nothing highlighted already, highlight the bottom entry
            if (!highlight.length) {
                $('div.ssehold:last').addClass('sseholdh');
            } else {
                // otherwise, change to the previous entry
                highlight.removeClass('sseholdh').prevAll('.ssehold:first').addClass('sseholdh');
            }
            break;
        case 40:
            // down arrow
            var highlight = $("div.sseholdh");
            // if nothing highlighted, select the first entry
            if (!highlight.length) {
                $('div.ssehold:first').addClass('sseholdh');
            } else {
                // otherwise, move the highlight down
                highlight.removeClass('sseholdh').nextAll('.ssehold:first').addClass('sseholdh');
            }
            break;
        default:
            // nothing here, I'm assuming you only want to move the highlight with the arrow keys
        } // switch keycode

ここで更新されたjsFiddle:http://jsfiddle.net/greglockwood/wy9ZX/2/

于 2011-11-08T08:00:47.623 に答える