【问题标题】:Button link to random div按钮链接到随机 div
【发布时间】:2012-01-05 03:15:55
【问题描述】:

我正在 Dreamweaver 中创建一个摄影课程应用,并希望用户能够点击一个按钮,从应用中的众多任务中随机分配给他们。

所有不同的分配都在单独的 div 中,具有单独的 div id。 我尝试了各种 javascript 随机链接生成器,但它们没有链接到 div id...他们正在寻找整个链接 (www.noelchenier.ca/#self) 而不是 div ID (#self)。

有什么办法吗?

这似乎也是这家伙问的,但没有解释在哪里使用它? How to jump to an anchor / div per random button (jQuery mobile)?

感谢任何可能的帮助 诺埃尔·切尼尔

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    您似乎是在说您有一个长页面,上面同时显示了很多 div,并且您想要一个按钮跳到其中一个随机的 div。如果是这样的话:

    <script>    
    $(document).ready(function() {
       $("#getAssignment").click(function() {
          var $divs = $(".assignment");
          if ($divs.length > 0) {
             window.location.href = "#" + $divs[ Math.floor(Math.random() * $divs.length) ].id;
          }
       });
    });    
    </script>
    
    <input id="getAssignment" type="button" value="Get assignment">
    
    <div id="a1" class="assignment">Assigment 1</div>
    <div id="a2" class="assignment">Assigment 2</div>
    <div id="a3" class="assignment">Assigment 3</div>
    <div id="a4" class="assignment">Assigment 4</div>
    

    本质上,它获取所有具有“assignment”类的 div 的列表,然后通过将location.href 设置为“#”加上 div id 随机选择一个移动到 - 这意味着 url 的哈希部分将在地址栏中进行更改,以便用户可以为该特定作业添加书签。

    但是,当用户可以自己浏览列表时,从所有显示的一堆中选择一个随机分配似乎有点奇怪。对我来说,从隐藏所有分配开始,然后每次单击按钮时只显示一个随机分配对我来说更有意义。使用与上面相同的html:

    $(document).ready(function() {
       var $assignments = $(".assignment");
       $assignments.hide();
       $("#getAssignment").click(function() {
          $assignments.hide();
          if ($assignments.length > 0)
             $($assignments[Math.floor(Math.random()*$assignments.length)]).show();
       });
    });
    

    更新

    从您的上一条评论中,我想知道您是否尝试对多个元素使用相同的 id 属性?这是行不通的,因为每个 id 都必须是唯一的。

    如果想法是有几个容器 div,每个容器中都有一个按钮,应该从该容器中随机选择一个 div,请尝试在按钮中提供 class="getAssignment" 而不是 id=...,然后编写如下代码:

    <script>    
    $(document).ready(function() {
       $(".getAssignment").click(function() {
          var $divs = $(this).parent().find(".assignment");
          if ($divs.length > 0) {
             window.location.href = "#" + $divs[ Math.floor(Math.random() * $divs.length) ].id;
          }
       });
    });    
    </script>
    <div>
       <input class="getAssignment" type="button" value="Get assignment">
       <div id="a1" class="assignment">Assigment 1</div>
       <div id="a2" class="assignment">Assigment 2</div>
       <div id="a3" class="assignment">Assigment 3</div>
       <div id="a4" class="assignment">Assigment 4</div>
    </div>
    <div>
       <input class="getAssignment" type="button" value="Get assignment">
       <div id="b1" class="assignment">Assigment 7</div>
       <div id="b2" class="assignment">Assigment 8</div>
       <div id="b3" class="assignment">Assigment 9</div>
       <div id="b4" class="assignment">Assigment 10</div>
    </div>
    

    点击处理程序被分配给所有具有“getAssignment”类的元素,然后代码$(this).parent().find(".assignment")获取被点击按钮的父div并在其中找到任何“.assignment”div。

    【讨论】:

    • 感谢 nnnnn 编码!我把它放进去,但它仍在寻找一个 html 文件。我改变了:window.location.href = "#" + $divs[ Math.floor(Math.random() * $divs.length) ].id;到 window.location.hash = "#" + $divs[ Math.floor(Math.random() * $divs.length) ].id;这似乎工作!用户将有两个选项,选择他们自己的任务,或者让应用程序选择。感谢您的帮助!
    • 不客气。抱歉,我一开始就应该考虑使用location.hash,但在我发布答案之前,我对我的代码进行了快速测试,它在 IE 中工作正常,所以那时我停止思考并继续前进到我答案的隐藏/显示部分...
    • 嘿,没问题。没有像你这样了不起的人的帮助,我不可能做到这一点!诺埃尔
    • 知道您是否可以拥有多个课程?例如,我有作业类,它与随机脚本一起工作得很好。我可以给同一个 div 另一个类名以使用不同的随机脚本吗?例如,
    • 你绝对可以为同一个元素赋予多个类。在您的 html 中,只需将它们列出以空格分隔:&lt;div class="class1 class2 class3 etc" /&gt;。至于动态添加额外的类,jQuery 函数 .addClass().removeClass() 仅添加/删除您指定的类,而保留任何其他类(参见 jQuery 文档)。
    【解决方案2】:

    由于您尚未发布任何 HTML,因此有多种可能性。第一个,在一个 javascript 数组中列出所有相关的 ID,然后随机选择一个:

    var items = [
       "id1",
       "id2",
       "id3"
    ];
    
    var randomItemId = items[Math.floor(Math.random() * items.length)];
    

    然后,使用 jQuery 访问 if:

    $("#" + randomItemId)
    

    其次,如果所有相关的div都具有相同的类名,你可以这样做:

    var items = $(".whateverClassName");
    var randomItemNum = Math.floor(Math.random() * items.length);
    var randomItem = items.eq(randomItemNum);
    

    【讨论】:

    • 这与问题链接中给出的答案基本相同。不同之处在于,此方法也会阻止您获取您不想要的 div(例如包含他们单击的按钮的 div)。您需要将“var randomItem = items[Math.floor(Math.random() * items.length)];”放在按钮的单击处理程序中,另一个只是静态初始化(所以基本上任何地方其他人可以访问它)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多