【问题标题】:Making 1 of 6 Variables true randomly in jquery在 jquery 中随机使 6 个变量中的 1 个为真
【发布时间】:2011-12-13 18:20:54
【问题描述】:

我正在尝试使一系列 div 中的一个与 jquery 及其导航链接一起随机出现(即,如果服务被选中,服务链接将消失)。我在这个论坛上多次以各种形式找到此代码,并且想知道是否以及如何将其调整为我想要的。

var services = $(random1, random2, random3).get()
            .sort(function(){return  Math.round(Math.random());}).slice(0,1)
        $(services)/*Conditions here*/;

var random1 = false;
var random2 = false;
var random3 = false;

我知道,这是一个非常糟糕的例子。我迷路了。任何帮助将不胜感激,并提前致谢。

编辑:我之前确实尝试过进行更简单的比较,但这是我实际正在做的事情。我试图改编来自@pst 的代码。

    var v1 = "hello"
var v2 = "world"
var control = [
   function (v) { v1 = v },
   function (v) { v2 = v }
]

$.each(control, function (i, fn) {
   fn(false)
})



$("a#random-btn").click(function(event){
    event.preventDefault();

    var trueIdx = Math.floor(control.length * Math.random())
    props[trueIdx](true)


        if (v1 === true){
                $("div#small-obstacles-contain a#1 span").stop().animate({opacity: 1,}, '100').animate({opacity: 0,}, '100');
                $("div#small-obstacles-contain a#2 span").stop().animate({opacity: 1,}, '100').animate({opacity: 0,}, '100');
        }   

        if (v2 === true){
                $("div#small-obstacles-contain a#3 span").stop().animate({opacity: 1,}, '100').animate({opacity: 0,}, '100');
                $("div#small-obstacles-contain a#4 span").stop().animate({opacity: 1,}, '100').animate({opacity: 0,}, '100');
        }

});

【问题讨论】:

  • 请不要将不是 DOM 元素的对象包装在 jQuery 对象中。这不是 jQuery 的用途。您可以使用纯 javascript 来做到这一点,如果您想要好的功能实用程序,请查看 Underscore.js。除此之外,$(random1, random2, random3).get()[random1, random2, random3] 相同 - 所以你实际上并没有使用 jQuery,因为你包装了你的变量然后再次解包它们。 $(services); 然后什么都不做,因为你扔掉了返回值。
  • 我还没有添加退货,我在默认的.show() 有它。它很可能是.animation()。没关系,我希望它使 var 为真。

标签: jquery arrays variables var


【解决方案1】:

我怀疑这确实是一个 X-Y 问题,这个地址是标题,但可能会错过“一天结束时真正想要的东西”。无论如何,这些概念都有一定的适应性。


我不会使用变量,而是使用数组/对象。

让我们假设一个对象(因此我们可以使用不同的名称:-),然后是一个“控制”序列,其属性可以被切换:

var obj = {a: true, b: false, "3": false, hello: "world"} 
var control = ["a", "b", "3"]
// set all to false -- noet that $.each != $().each !!!
$.each(control, function (i, prop) {
  obj[prop] = false
})
// set one true
var trueIdx = Math.floor(control.length * Math.random())
obj[control[trueIdx]] = true

但是,如果出于某种原因确实需要变量,则可以使用闭包(这也可以用于为特定绑定运行任意代码):

var v1 = "hello"
var v2 = "world"
var control = [
   function (v) { v1 = v },
   function (v) { v2 = v }
]
// set all to false -- noet that $.each != $().each !!!
$.each(control, function (i, fn) {
   fn(false)
})
// set one true
var trueIdx = Math.floor(control.length * Math.random())
props[trueIdx](true)

编码愉快。

【讨论】:

  • “愉快的混淆”我会说 ;-)
  • @zerkms 如果你认为这很糟糕...... ;-)
  • @zerkms 是对的,试图隐藏代码的风度。不是出于安全考虑,我只是想进行更轻松的比较。我正在发布我现在正在处理的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-26
  • 1970-01-01
  • 2018-12-22
  • 2017-05-19
  • 1970-01-01
  • 2016-01-18
  • 2017-03-29
相关资源
最近更新 更多