jQuery Keydown Next、NextAll、父问题

Posted

技术标签:

【中文标题】jQuery Keydown Next、NextAll、父问题【英文标题】:jQuery Keydown Next, NextAll, Parent Issue 【发布时间】:2020-05-14 19:44:12 【问题描述】:

再次回到我的克星(jQuery/JS)

基本上我有一堆 div,每个里面都有一个隐藏的 div,点击时会切换。这很好用。

<div class="parent">
    <div class="article-holder">
        <a href=""class="article">link</a>
        <div class="hidden">hidden content</div>
    </div>

    <div class="article-holder">
        <a href=""class="article">link</a>
        <div class="hidden">hidden content</div>
    </div>

    <div class="article-holder">
        <a href=""class="article">link</a>
        <div class="hidden">hidden content</div>
    </div>

    <div class="article-holder">
        <a href=""class="article">link</a>
        <div class="hidden">hidden content</div>
    </div>
</div>
$(".parent").on("click",".article",function()
    $(".hidden").hide("fast");
    $(this).next('.hidden').slideToggle("fast");
);

我现在决定让用户能够使用光标点击下一步:

$(document).keydown(function(e)
    switch (e.which)
    case 39:
    $(this).parent('.parent').closest('.article-holder').next('.hidden').slideToggle();
    break;
    
);

这是我无法工作的部分。我尝试了多种想法,但无法获得正确的光标来切换下一个隐藏的 div。

【问题讨论】:

【参考方案1】:

要实现这一点,您需要使用 addClass()removeClass().article-holder 元素

使用.not($(this).next('.hidden')) 避免在下一个.hidden 中切换

$(".article-holder.opened")捕捉打开的文章..然后用.next(".article-holder").find(".article").trigger("click")触发点击/切换动作

在下一个代码中,我添加/删除名为 opened 的类。按 >

$(".parent").on("click",".article",function(e)
    e.preventDefault();
    $(".article-holder").removeClass("opened");
    $(".hidden").not($(this).next('.hidden')).hide("fast");
    $(this).closest(".article-holder").addClass("opened")
    $(this).next('.hidden').slideToggle("fast");
);

//I've now decided I want to have the user able to use the cursor to hit next:

$(window).on( "keydown" ,function(e)
    e = e.which || e.keyCode;
    switch (e)
      case 37:
        if($(".article-holder.opened").length)
          if($(".article-holder.opened").index() !== ($(".article-holder").length))
          $(".article-holder.opened").prev(".article-holder").find(".article").trigger("click");
          
        else
          $(".article-holder:eq("+ ($(".article-holder").length - 1)+") > .article").trigger("click");
        
        break;
      case 39:
        if($(".article-holder.opened").length)
          if($(".article-holder.opened").index() !== $(".article-holder").length -1)
          $(".article-holder.opened").next(".article-holder").find(".article").trigger("click");
          
        else
          $(".article-holder:eq(0) > .article").trigger("click");
        
      break;
    
);
.hidden
  display : none;

.article-holder.opened
  background : red;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="parent">
    <div class="article-holder">
        <a href=""class="article">link</a>
        <div class="hidden">hidden content</div>
    </div>

    <div class="article-holder">
        <a href=""class="article">link</a>
        <div class="hidden">hidden content</div>
    </div>

    <div class="article-holder">
        <a href=""class="article">link</a>
        <div class="hidden">hidden content</div>
    </div>

    <div class="article-holder">
        <a href=""class="article">link</a>
        <div class="hidden">hidden content</div>
    </div>
</div>

【讨论】:

感谢您的回复。按键是不起作用的部分。在您的 sn-p 中不起作用? 对不起@Paul 我误解了这个问题,但现在更新了答案 @Paul 我的互联网连接确实很糟糕,这就是为什么我需要很长时间来更新答案.. 现在检查答案 太棒了,你成功了。非常感谢您的帮助:D 不客气@Paul ..祝你有美好的一天:-)

以上是关于jQuery Keydown Next、NextAll、父问题的主要内容,如果未能解决你的问题,请参考以下文章

jQuery keydown 事件绑定 - 实时 vs keydown

vb6.0 循环语句 退出循环

使用 jQuery .keydown() 插入字符后继续输入

jquery 键盘事件 keypress() keydown() keyup()

在 JS/jQuery 中触发 keypress/keydown/keyup 事件?

Javascript/Jquery 验证按键/keydown 上的十进制输入